繁体   English   中英

搜索具有连接值的 TreeMap

[英]Searching a TreeMap with concatenated values

假设我将一个项目添加到定义的 TreeMap 中,例如:

directory.put(personsLastName + personsFirstName, " Email - " + personsEmail 
                        + ", Class Status - " + studentStatus);

如果我尝试做类似的事情:

boolean blnStudentExists = directory.containsValue("freshman");

它总是会出现错误。 我想知道这是否与我填充地图的方式有关? 如果是这样,我怎样才能在地图中找到所有作为学生的值? 我的目标是只打印学生。 谢谢。

请重新阅读 TreeMap Javadocs - 或通用Map接口,就此而言 - 并非常熟悉它们,了解您在此处尝试做什么。

.containsValue()将在您插入到 Map 的值域中搜索特定的、完全匹配的 - 仅此而已。 您不能使用它来搜索部分字符串。 因此,如果您插入了abc@def.com, Class Status - Freshman的值abc@def.com, Class Status - Freshman.containsValue只会为abc@def.com, Class Status - Freshman返回true abc@def.com, Class Status - Freshman - 而不仅仅是Freshman

这让你何去何从?

  1. 您可以编写自己的“搜索”例程,遍历映射中的每个值,并对您要搜索的内容执行子字符串匹配。 对大量值无效。 如果/在添加更多分隔符时,您还需要担心可能会混淆字段之间的分隔符。
  2. 您可以创建和使用多个并行映射 - 一个映射到班级状态,另一个映射到电子邮件等。
  3. 您可以使用数据库(或嵌入式数据库-选择您的风格)-无论如何,这看起来都是您要在这里创建的内容。 你真的需要重新造轮子吗?

就此而言 - 无论如何,您不想按您的价值观进行搜索。 这与 Map 的确切目的背道而驰 - 哈希、树或其他。 按您的键搜索是任何效率所在。 在大多数实现中(包括开箱即用的 TreeMap 和 HashMap) - 对值的搜索无论如何都必须扫描整个 Map 结构(或者至少,直到它在找到第一个匹配项后可以退出)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM