entrySet()
方法返回 Set<Map.Entry<K,V>>
在 HashMap/HashTable 中。为什么集合不支持add/addAll操作,我们知道key和value条目?
我注意到java.util.Hashtable.EntrySet.add(Map.Entry<K, V> o)
在Jdk1.8中实现如下:
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);
}
}
为什么不实现支持如下添加操作:
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);
}
}
最佳答案
它符合Map.entrySet javadocs:
集合支持元素删除,即通过 Iterator.remove、Set.remove、removeAll、retainAll 和clear 操作从映射中删除相应的映射。不支持add或addAll操作。
关于java - 为什么不支持从entrySet()返回的集合的add/addAll操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52963751/