【问题标题】:How exactly keySet(V mappedValue) in ConcurrentHashMap works?ConcurrentHashMap 中的 keySet(V mappedValue) 究竟是如何工作的?
【发布时间】:2018-02-25 12:03:33
【问题描述】:
这个方法是如何使用的?这有什么用途?通常所有集合视图(包括 keySet())都不允许 add 和 addAll 方法 - 因为我不能添加没有相应值的任何键。抱歉,我不了解 API 以及如何使用此方法。任何人都可以举一个明确的例子吗?这是否意味着如果我将 myNewKey 添加到此类键集中,则 (myNewKey, mappedValue) 键值绑定将添加到相应的(原始)映射?
public ConcurrentHashMap.KeySetView keySet(V mappedValue)
返回此映射中键的 Set 视图,使用给定的公共
任何添加的映射值(即 Collection.add(E) 和
Collection.addAll(Collection))。这当然只适用于
对此的所有添加使用相同的值是可以接受的
查看。
【问题讨论】:
标签:
java
concurrenthashmap
【解决方案1】:
通常所有集合视图(包括 keySet())都不允许 add 和 addAll 方法 - 因为我无法添加没有相应值的任何键
这里不是这样。将元素添加到keySet(V mappedValue) 相当于放入与值mappedValue 关联的Map 新键。
如果我将 myNewKey 添加到此类键集中,那么 (myNewKey, mappedValue) 键值绑定将添加到相应的(原始)映射?
没错。
ConcurrentHashMap<String,String> map = new ConcurrentHashMap<>();
Set<String> keySet = map.keySet("sameValue");
keySet.add("key1");
keySet.add("key2");
将产生相同的Map:
ConcurrentHashMap<String,String> map = new ConcurrentHashMap<>();
map.put("key1","sameValue");
map.put("key2","sameValue");