java - 在不迭代的情况下在 HashMap 中获取整数

标签 java

如果我有:

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/

相关文章:

java - Smack 无需聊天即可发送和接收消息

java - SimpleDateFormat 中的大写字母

java - JPA 不能很好地支持接口(interface)......影响?

java - 使用 Jersey 2.x 客户端,如何在服务器仍在写入其 OutputStream 时从 InputStream 读取数据?

java - keystore 被篡改,或密码不正确 - Java Springboot应用程序

java - 使用 BouncyCaSTLe 创建 key 对证书并使用外部 CA 对其进行签名

java - 如何在java中更改自定义android键盘的按键标签

java - 异常应该在哪一层捕获?

java - 如何解决 IllegalArgumentException : Target object must not be null

java - 基于同一应用程序的两个版本的移动应用程序