3 回答
TA贡献1836条经验 获得超4个赞
从 JavaDoc onentrySet()
方法:
该集合支持元素移除,通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的映射。它不支持 add 或 addAll 操作。
TA贡献1797条经验 获得超6个赞
方法 java.util.HashMap.entrySet() 返回一个类 java.util.HashMap.EntrySet,它本身不实现方法 Set.add()。
要将对象添加到集合中,您必须使用方法 myMap.put(entry.getKey(), entry.getValue())。
方法 entrySet() 仅用于读取数据,不用于修改。
TA贡献1845条经验 获得超8个赞
问题是你add()在entrySet()of上调用方法,HashMap并且在那个类中没有这样的实现,只有在它的超类中。
从HashMap源代码:
public Set<Map.Entry<K,V>> entrySet() {
Set<Map.Entry<K,V>> es;
return (es = entrySet) == null ? (entrySet = new EntrySet()) : es;
}
final class EntrySet extends AbstractSet<Map.Entry<K,V>> {
// there is no add() override
}
因为add()方法没有被覆盖(既不是 inHashMap.EntrySet也不是 in AbstractSet),所以AbstractCollection将使用from 方法,它具有以下定义:
public boolean add(E e) {
throw new UnsupportedOperationException();
}
另外,查看entrySet()Javadoc:
(...) set 支持元素移除,通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中移除对应的映射。它不支持 add 或 addAll 操作。
添加回答
举报