使用串联值搜索 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()
将在您插入到地图中的值域中搜索特定的 精确 匹配 - 仅此而已。您不能使用它来搜索部分字符串。因此,如果您插入值 abc@def.com, Class Status - Freshman
,.containsValue
只会 return true
用于 abc@def.com, Class Status - Freshman
- 而不仅仅是 Freshman
.
这会让你去哪里?
- 您可以编写自己的 "search" 例程来遍历映射中的每个值,并为您要搜索的内容执行子字符串匹配。对于大量值来说效率不高。您还需要担心字段之间可能会混淆分隔符,if/as 您添加更多。
- 您可以创建并使用多个平行映射 - 一个映射到 class 状态,另一个映射到电子邮件等。
- 您可以使用数据库(或嵌入式数据库 - 选择您的风格)- 无论如何,这看起来就是您要在此处创建的内容。你真的需要重新造轮子吗?
就此而言 - 无论如何,您不想按您的价值观进行搜索。这违背了地图的确切目的——哈希、树或其他。通过您的密钥进行搜索是提高效率的地方。在大多数实现中(包括开箱即用的 TreeMap 和 HashMap)- 对值的搜索无论如何都必须扫描整个 Map 结构(或者至少,直到它在找到第一个匹配项后可以退出)。
假设我将一个项目添加到定义的 TreeMap 中,例如:
directory.put(personsLastName + personsFirstName, " Email - " + personsEmail
+ ", Class Status - " + studentStatus);
如果我尝试做类似的事情:
boolean blnStudentExists = directory.containsValue("freshman");
结果总是假的。我想知道这是否与我填充地图的方式有关?如果是这样,我如何才能在地图中找到所有属于学生的值?我的目标是只打印学生。谢谢
请重新阅读 TreeMap Javadocs - 或通用 Map 接口,就此而言 - 并非常熟悉它们以了解你在这里尝试做的事情。
.containsValue()
将在您插入到地图中的值域中搜索特定的 精确 匹配 - 仅此而已。您不能使用它来搜索部分字符串。因此,如果您插入值 abc@def.com, Class Status - Freshman
,.containsValue
只会 return true
用于 abc@def.com, Class Status - Freshman
- 而不仅仅是 Freshman
.
这会让你去哪里?
- 您可以编写自己的 "search" 例程来遍历映射中的每个值,并为您要搜索的内容执行子字符串匹配。对于大量值来说效率不高。您还需要担心字段之间可能会混淆分隔符,if/as 您添加更多。
- 您可以创建并使用多个平行映射 - 一个映射到 class 状态,另一个映射到电子邮件等。
- 您可以使用数据库(或嵌入式数据库 - 选择您的风格)- 无论如何,这看起来就是您要在此处创建的内容。你真的需要重新造轮子吗?
就此而言 - 无论如何,您不想按您的价值观进行搜索。这违背了地图的确切目的——哈希、树或其他。通过您的密钥进行搜索是提高效率的地方。在大多数实现中(包括开箱即用的 TreeMap 和 HashMap)- 对值的搜索无论如何都必须扫描整个 Map 结构(或者至少,直到它在找到第一个匹配项后可以退出)。