首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用部分密钥获取HashMap的值

使用部分密钥获取HashMap的值
EN

Stack Overflow用户
提问于 2015-10-07 09:37:30
回答 6查看 4.5K关注 0票数 4

我有一个HashMap(字符串,对象)。键是多个唯一ID的组合。我有一个输入,一个字符串,它是键的一部分(一个唯一ID)。我需要使用我拥有的键的那一部分在HashMap中获得值,而不需要在HashMap中迭代数千个值。

我们可以使用HashMap.get()中的任何Regex语句来实现它吗?

我的关键是xxx.yyy.zzz,在这里,xxx.zzz的组合在整个地图中是唯一的。我有xxx和zzz作为输入。另外,对于给定的zzz,我有一组yyy的可能值(可能增加5-6个可能性)。

我现在有两个选择来解决这个问题。

  1. Map.Entry检查键是否以xxx和zzz分别启动和结束。
  2. 尝试和错误方法i.使用所有可能的yyys组成键xxx.yyy.zzz,并检查密钥是否存在使用.contains() ii。但是这样的话,如果我对每个调用执行.contains() 5-6次,那么在最坏的情况下它不会循环5-6次吗?三、此外,我正在创建更多的字符串在字符串池。

我应该选哪一种?

EN

回答 6

Stack Overflow用户

发布于 2015-10-07 09:41:28

在不迭代条目/键(您不想要的)的情况下,从HashMap检索值的唯一方法是搜索完整的键。

如果需要通过部分密钥进行高效搜索,则应考虑拥有一个HashMap,其密钥就是该部分密钥。

票数 5
EN

Stack Overflow用户

发布于 2015-10-07 09:43:38

不,不可能在HashMap中使用部分键。

使用TreeMap,可以通过希望键的部分前缀来实现这一点,因为它允许您使用tailMap(String key)返回映射中跟随特定键(即密钥部分)的一部分。您仍然需要处理条目,以查看哪些条目与部分密钥匹配。

票数 4
EN

Stack Overflow用户

发布于 2015-10-07 10:08:41

如果您的密钥与xxx.yyy.zzz类似,并且希望使用xxx.*类型的access,则可以考虑使用my MapFilter类。

它允许您获取一个Map并在特定的键前缀上对其进行筛选。这将完成对特定前缀的搜索,并将搜索结果保留到以后。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32988832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档