使用连接值搜索TreeMap

时间:2015-06-15 01:10:20

标签: java treemap

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

请重新阅读TreeMap Javadocs - 或通用的Map界面 - 并且非常熟悉它们在这里要做的事情。

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

这会让你离开?

  1. 您可以编写自己的“搜索”例程,迭代遍历地图中的每个值,并为您要搜索的内容执行子字符串匹配。对于大量值而言效率不高。如果/当您添加更多内容时,您还需要担心字段之间可能会混淆分隔符。
  2. 您可以创建并使用多个并行映射 - 一个映射到类状态,另一个映射到电子邮件等。
  3. 你可以使用一个数据库(或一个嵌入式数据库 - 挑选你的味道) - 这看起来就是你想要在这里创建的东西。你真的需要重新制作轮子吗?
  4. 对于这件事 - 无论如何,你不想用你的价值观进行搜索。这违反了地图的确切目的 - 哈希,树或其他。按键搜索是效率所在的地方。在大多数实现中(包括开箱即用的TreeMap和HashMap) - 对值的搜索无论如何都必须扫描整个Map结构(或者至少,直到找到第一个匹配后才能挽救)。