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()