假设我将一个项添加到已定义的TreeMap中,如:
directory.put(personsLastName + personsFirstName, " Email - " + personsEmail
+ ", Class Status - " + studentStatus);
如果我尝试做类似的事情:
boolean blnStudentExists = directory.containsValue("freshman");
它总会出错。我想知道这是否与我填充地图的方式有关?如果是这样,我怎样才能在地图中找到学生的所有值?我的目标是打印学生。感谢。
答案 0 :(得分:1)
请重新阅读TreeMap Javadocs - 或通用的Map界面 - 并且非常熟悉它们在这里要做的事情。
.containsValue()
将在您插入地图的值域中搜索特定的完全匹配 - 仅此而已。您不能使用它来搜索部分字符串。因此,如果您插入abc@def.com, Class Status - Freshman
的值,.containsValue
只会返回true
的{{1}} - 而不仅仅是abc@def.com, Class Status - Freshman
。
这会让你离开?
对于这件事 - 无论如何,你不想用你的价值观进行搜索。这违反了地图的确切目的 - 哈希,树或其他。按键搜索是效率所在的地方。在大多数实现中(包括开箱即用的TreeMap和HashMap) - 对值的搜索无论如何都必须扫描整个Map结构(或者至少,直到找到第一个匹配后才能挽救)。