entrySet()
方法在HashMap / HashTable中返回Set<Map.Entry<K,V>>
。为什么集合不支持add / addAll操作,我们知道键和值输入?
我注意到Jdk1.8中的java.util.Hashtable.EntrySet.add(Map.Entry<K, V> 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);
}
}
为什么不实现支持添加操作,例如:
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);
}
}
答案 0 :(得分:1)
它符合Map.entrySet javadocs:
该集合支持元素删除,该元素通过Iterator.remove,Set.remove,removeAll,retainAll和clear操作从映射中删除相应的映射。它不支持add或addAll操作。
答案 1 :(得分:0)
我看到的一个原因是EntrySet不知道它属于哪种集合,因此它不知道允许哪种键。