Java 使用串联值搜索树映射
假设我将一个项目添加到定义的树状图中,如:Java 使用串联值搜索树映射,java,treemap,Java,Treemap,假设我将一个项目添加到定义的树状图中,如: directory.put(personsLastName + personsFirstName, " Email - " + personsEmail + ", Class Status - " + studentStatus); 如果我尝试做以下事情: boolean blnStudentExists = directory.containsValue("freshman"); 结果总是假的。我
directory.put(personsLastName + personsFirstName, " Email - " + personsEmail
+ ", Class Status - " + studentStatus);
如果我尝试做以下事情:
boolean blnStudentExists = directory.containsValue("freshman");
结果总是假的。我想知道这是否与我填充地图的方式有关?如果是这样,我如何在地图中找到所有属于学生的值?我的目标是只打印学生。谢谢。请重新阅读TreeMap Javadocs或通用接口,并非常熟悉它们,了解您在这里要做的事情
.containsValue()
将在您插入地图的值域中搜索特定的、精确的匹配项-不多也不少。不能使用此选项搜索部分字符串。因此,如果插入值abc@def.com,班级状态-新生
,。containsValue
只会为for返回true
abc@def.com,班级状态-新生
-不仅仅是新生
这件事留给你的是什么
就这一点而言,无论如何,你都不想用你的值来搜索。这违背了映射的确切用途—哈希、树或其他。通过按键进行搜索是提高效率的关键所在。在大多数实现中(包括开箱即用树映射和HashMap)-对值的搜索无论如何都必须扫描整个映射结构(或者至少,直到它在找到第一个匹配项后退出)。新生如何才能等于
电子邮件-,类状态-
?变量studentStatus设置为一年级、二年级、三年级或四年级。查看您发布的代码中的字符串连接。您在哪里看到LastFirst
?即使这是你放进去的,整个字符串就是值。它永远不可能只匹配新生
,最重要的是,它是小写的。它们是什么都不重要。您存储在地图中的值看起来像Email-,Class Status-
。方法包含值
将检查您指定的值。在这种情况下,您指定了freshman
。你认为字符串Email-,Class Status-
是否可能等于freshman
?@kl654 Sotirios试图帮助你理解为什么这种方法永远不会奏效,所以与其寻求帮助,不如让你的方法奏效,你会考虑另一种方法。我怀疑这是因为我把较小的值串联在一起形成一个单一的值。你的解释很有帮助。非常感谢。