Java 为什么不支持对从entrySet()返回的集合执行添加/添加所有操作?

Java 为什么不支持对从entrySet()返回的集合执行添加/添加所有操作?,java,hashmap,hashtable,Java,Hashmap,Hashtable,entrySet()方法在HashMap/HashTable中返回Set。为什么集合不支持添加/添加所有操作,我们知道键和值输入 我注意到Jdk1.8中的java.util.Hashtable.EntrySet.add(Map.Entry o)实现如下: private class EntrySet extends AbstractSet<Map.Entry<K,V>> { public boolean add(Map.Entry<K,V> o) {

entrySet()
方法在HashMap/HashTable中返回
Set
。为什么集合不支持添加/添加所有操作,我们知道键和值输入

我注意到Jdk1.8中的
java.util.Hashtable.EntrySet.add(Map.Entry o)
实现如下:

private class EntrySet extends AbstractSet<Map.Entry<K,V>> {
    public boolean add(Map.Entry<K,V> o) {
        // MyNote: Call AbstractCollection<E>.add(E e) and 
        // throw UnsupportedOperationException
        return super.add(o);
    }
}
私有类入口集扩展了抽象集{
公共布尔添加(Map.Entry o){
//MyNote:调用AbstractCollection.add(E)和
//抛出不支持的操作异常
返回super.add(o);
}
}
为什么不实现支持如下添加操作:

private class EntrySet extends AbstractSet<Map.Entry<K,V>> {
    /**
    * @return <tt>false</tt> if key has exists
    */
    public boolean add(Map.Entry<K,V> o) {
        V old = Hashtable.this.put(o.getKey(), o.getValue());
        return (null == old);
    }
}
私有类入口集扩展了抽象集{
/**
*@如果密钥已存在,则返回false
*/
公共布尔添加(Map.Entry o){
V old=Hashtable.this.put(o.getKey(),o.getValue());
返回值(null==old);
}
}

它与Map.entrySet javadocs一致:


该集合支持元素移除,即通过Iterator.remove、set.remove、removeAll、retainal和clear操作从映射中移除相应的映射。它不支持add或addAll操作。

我能看到的一个原因是EntrySet不知道它属于哪种类型的集合,因此它不知道允许使用哪种类型的键。

只是想澄清一下,您正在查看的是哪种JDK版本?我在JDK1.8.0U152的代码中没有看到这一点。您指的是哪个EntrySet类?有多个同名的类,例如:java.util.TreeMap.EntrySet、java.util.HashMap.EntrySet、java.util.EnumMap.EntrySet等。pp@OHGODSPIDERSjava.util.Hashtable。EntrySet@OliverCharlesworth我使用JDK1.8.0_65。很抱歉造成混淆,源代码是
java.util.Hashtable.EntrySet.add(Map.Entry o)
,但为什么不支持按设计添加或添加所有操作?我们只能猜测,因为它从未在API或有效的java中解释过。也许设计师们认为这毫无意义。为什么它比原始地图更不了解这一点呢?