老实说,我试着查看很多帖子,但我不确定从ConcurrentHashMap获取特定密钥的正确方法是什么。
答案 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;元件。