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试图帮助你理解为什么这种方法永远不会奏效,所以与其寻求帮助,不如让你的方法奏效,你会考虑另一种方法。我怀疑这是因为我把较小的值串联在一起形成一个单一的值。你的解释很有帮助。非常感谢。