【发布时间】:2018-10-24 07:59:53
【问题描述】:
entrySet() 方法在 HashMap/HashTable 中返回 Set<Map.Entry<K,V>>。为什么 set 不支持 add/addAll 操作,我们知道 key 和 value 输入?
我注意到 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);
}
}
【问题讨论】:
-
只是为了澄清一下,您在看什么 JDK 版本?我在 JDK 1.8.0 u152 的代码中没有看到。
-
你指的是哪个 EntrySet 类?有多个具有该名称的类,例如:java.util.TreeMap.EntrySet、java.util.HashMap.EntrySet、java.util.EnumMap.EntrySet 等。pp
-
@OHGODSPIDERS java.util.Hashtable.EntrySet
-
@OliverCharlesworth 我使用 JDK1.8.0_65。很抱歉造成混淆,源代码是
java.util.Hashtable.EntrySet.add(Map.Entry<K, V> o)