如何从ConcurrentHashMap获取特定键或值

时间:2015-04-19 22:18:53

标签: java concurrenthashmap

老实说,我试着查看很多帖子,但我不确定从ConcurrentHashMap获取特定密钥的正确方法是什么。

  1. 如何获取ConcurrentHashMap中的第一个键?
  2. 首次遇到某个值时如何获取密钥?
  3. 如何更新特定密钥的值?

1 个答案:

答案 0 :(得分:5)

好的,我们逐一解决这些问题:

1)你不能。 ConcurrentHashMap没有订单。没有"第一"没有"最后"。

2)ConcurrentHashMap提供了一个entrySet,它与#34;弱一致",因此如果Map的内容在迭代期间发生变化,您可能会看到更改,你可能不会:

public static <K, V> Optional<K> getKeyForVal(final V val, final Map<K, V> map) {
    return map.entrySet().stream()
            .filter(e -> e.getValue().equals(val))
            .map(Map.Entry::getKey)
            .findFirst();
}

同样,没有&#34;第一&#34;这只是迭代过程中遇到的第一个

3)这很简单,只需再次添加相同的key -> value对,这将更新特定密钥的值。

所以这里的主要内容是ConcurrentHashMap 没有订单ConcurrentHashMap上的迭代顺序是未定义,甚至可能在不同的迭代之间发生变化。没有&#34;第一个&#34;,没有&#34;最后&#34;。

ConcurrentSkipListMap之类的东西确实有排序,它按照Comparator定义的键的顺序排序。所以这将是第一个&#34;和#34;最后&#34;元件。