为什么返回而不只是(keySet()
从Java SE8 开始)?ConcurrentHashMap
KeySetView<K,V>
Set
ConcurrentHashMap.KeySetView<K,V> keySet()
KeySetView - ConcurrentHashMap 作为一组键的视图,其中 可以选择通过映射到公共值来启用添加。
但是keySet()
不能启用“映射到一个共同的值”(不像keySet(V mappedValue)
),所以我认为这样做没有任何意义KeySetView<K,V>
——boolean add(K e)
而且boolean addAll(Collection<? extends K> c)
方法总是会扔UnsupportedOperationException
在这里。
PS 我知道KeySetView<K,V>
extends (is-a) Set<K>
。所以我可以像往常一样使用 Set 接口。
我也明白 keySet() 可以自由地将它喜欢的任何类返回给 Set 接口(我们不会关心),但是在 ConcurrenthashMap 中,返回类被明确记录 - 似乎是出于某种有用的目的。
也许这里唯一的用例是可以KeySetView<K,V>
访问支持地图:
ConcurrentHashMap<K,V> getMap()