【问题标题】:Check if a value in hashmap already exists检查hashmap中的值是否已经存在
【发布时间】:2014-05-13 13:24:23
【问题描述】:

我创建了一个包含字符串值的 hashMap。我希望每次向映射添加一个新值以检查哈希映射中是否已存在。我已经定义了

final HashMap<String, String> map = new HashMap<String, String>(); map.put(key, myURL.toString());

我如何循环遍历 hashmap 以检查是否存在重复项?

【问题讨论】:

  • 如果键和值之间存在一对一的关系,使用 BiMap 会更有效。
  • HashMaps 的一个主要目的是防止 O(n) 获取。此外,通过阅读 API 文档很容易回答这个问题。 docs.oracle.com/javase/7/docs/api/java/util/Map.html 学会阅读,学会爱他们。

标签: java hashmap duplicates


【解决方案1】:

map.containsKey(key)

map.containsValue(val)

如果您坚持迭代,请执行以下操作:

Iterator<Entry<String, String>>iterator=map.entrySet();
while(iterator.hasNext()){
  final Entry<String, String>next=iterator.next();
  next.getKey(); next.getValue();
}

指定者: http://docs.oracle.com/javase/7/docs/api/java/util/Map.html

【讨论】:

    【解决方案2】:

    简单:

    return map.containsValue(myURL.toString());
    

    例如。或者,使用 java8 流:

    return map.values().stream().anyMatch(v -> v.equals(myURL.toString()))
    

    但是当您要求高效解决方案时,我建议您使用老式的非流版本。因为第二个版本很可能使用明显更多的 CPU 周期。

    只有当您的地图有 无数 个条目,并且您只查看 响应时间,那么使用 parallelStream() 可能会给您更多答案快。

    【讨论】:

      【解决方案3】:
      boolean result = selections.values().stream().anyMatch(Boolean::booleanValue);
      

      【讨论】:

        【解决方案4】:

        map.containsValue 方法是你所需要的。见doc

        【讨论】:

          【解决方案5】:

          查看类javadocs,你会看到有两个方法 contains key 和 containsvalue http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

          【讨论】:

            【解决方案6】:

            说到效率,这种数据结构的存在就是低效率和糟糕设计的证明。 containsValue(V) 就是你要找的方法

            【讨论】:

              猜你喜欢
              • 2012-05-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-23
              • 1970-01-01
              相关资源
              最近更新 更多