java - 为什么不支持 entrySet() 返回的集合的 add/addAll 操作?
问题描述
该entrySet()
方法Set<Map.Entry<K,V>>
在 HashMap/HashTable 中返回。为什么 set 不支持 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 操作。
推荐阅读
- if-statement - 如果在 Wixcode 中单击按钮后出现其他情况
- mongodb - 无法为 mongo db 创建目录
- python - 我在哪里可以找到关于 PyTorch 的 Tensor.unfold() 用于获取图像补丁的直观解释?
- google-analytics - 用户对此属性没有足够的权限
- javascript - 我是 javqascript 和 html 的新手,如何在 html 中有一个文本框,告诉 js 的答案使其成为变量
- r - 如何从头开始使用 R 为特定“性别”生成随机缺失 (MAR) 数据
- python - Python多处理PID不匹配
- python - 如何分离 aiff 频道并将其保存为 wav 格式?
- javascript - RxJS:计算集合项的更改
- python - 返回新变量中列表的元素并将其从列表中删除