Java 为什么ConcurrentHashMap中的keySet()返回KeySetView,而不是像其他Map实现那样仅返回Set?

Java 为什么ConcurrentHashMap中的keySet()返回KeySetView,而不是像其他Map实现那样仅返回Set?,java,concurrenthashmap,keyset,Java,Concurrenthashmap,Keyset,为什么ConcurrentHashMap中的keySet()返回KeySetView,而不仅仅是Set(自Java SE8以来) 由于Set已经提供了这些方法,您关于add(ke)等抛出UnsupportedOperationException的观点难道没有意义吗?因此,即使是普通的键集也必须以相同的方式实现这些方法。在Java 7和Java 8之间,ConcurrentHashMap.keySet()方法确实从返回set变为返回ConcurrentHashMap.KeySetView。这是一个

为什么
ConcurrentHashMap
中的
keySet()
返回
KeySetView
,而不仅仅是
Set
(自Java SE8以来)


由于
Set
已经提供了这些方法,您关于
add(ke)
等抛出
UnsupportedOperationException
的观点难道没有意义吗?因此,即使是普通的键集也必须以相同的方式实现这些方法。在Java 7和Java 8之间,
ConcurrentHashMap.keySet()
方法确实从返回
set
变为返回
ConcurrentHashMap.KeySetView
。这是一个协变覆盖,因为
KeySetView
实现
Set
。这个问题可以解释为为什么这在
Java8
中发生了变化。如果设计者/实现者不在这里发表文章,那么必须有人深入代码来回答问题ConcurrentHashMap chm=new ConcurrentHashMap();chm.put(“一”,1);chm.put(“两”,2);Set=chm.keySet();集合。添加(“三”);//不支持操作异常有关此线程的一些相关讨论:
ConcurrentHashMap.KeySetView<K,V>   keySet()
ConcurrentHashMap<K,V>  getMap()