【问题标题】: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");
    

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 2021-08-15
      • 2012-06-08
      • 2011-10-11
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 2011-06-01
      相关资源
      最近更新 更多