作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我有:
HashMap<String, Integer> hm = new HashMap<String, Integer>();
我是否能够在不遍历整个 HashMap 的情况下基于整数获取所有字符串?如果这不可能,处理这个问题的最佳方法是什么?
最佳答案
不,您必须遍历该映射的内容以获得字符串的整数。这样做的原因是您将 key 设置为您想要的任意字符串,而 value 是您要搜索的整数。
如果您有整数,则可以遍历条目集:
for(Map.Entry<String, Integer> entry : hm.entrySet()) {
if(entry.value().equals(searchValue) {
// logic
}
}
但这种方法采用了为此使用 map 的想法,并将其颠倒过来。
把它想象成一本字典。将单词和定义分别视为键和值。如果您知道要查找的单词,则会相对快速地为您提供值 - 它按字母顺序排列。
但是,如果你只知道定义,你怎么查字典呢?您必须查看每个定义,直到找到您所拥有的确切定义,然后您可以从中获取 key 。
这里也发生了同样的事情。您现在无需使用索引来搜索您的数据结构,而是遍历其中的每个可能值以获取特定键。
对于更大的数据集,这是完全站不住脚的。
我会推荐 BiMap
来自 Google Guava,有一些注意事项:
此外,根据您的评论,您甚至可能想查看 Multimap
反而。它允许您为多个不同的值提供一个键,这可能适合您尝试使用的用例。
这是一个示例实现:
Multimap<Integer, String> dataSet = HashMultimap.create();
dataSet.put(1, "foo");
dataSet.put(1, "bar");
dataSet.put(1, "baz");
// prints [baz, bar, foo]
System.out.println(dataSet.get(1));
关于java - 在不迭代的情况下在 HashMap 中获取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25215437/
我是一名优秀的程序员,十分优秀!