关于Map<K,V>
界面:
为什么keySet()
会返回支持Set
操作但不支持remove
和add()
操作的addAll()
?
答案 0 :(得分:11)
Set
返回的keySet
由Map
支持,因此对地图的更改是
反映在集合中,反之亦然。这意味着在remove
上调用Set
会从Entry
中删除匹配的Map
。
在add
上调用addAll
或Set
是没有意义的,因为您无法将没有相应值[s]的键[s]添加到{{1} }}
答案 1 :(得分:2)
想想你的要求:
你想要检索地图的所有KEYS(并且该集合不是键的“副本”;它代表地图的键)。
然后你要求向那些KEYS添加元素。换句话说:您正在查看的“数据集”具有来自地图的键的语义含义。并且您希望增加“数据集” - 但不提供该地图的相应条目。
另一方面,删除是直截了当的;删除密钥也会删除地图中的相应条目。
答案 2 :(得分:2)
这是因为集合中的每个键都链接到地图中的值。删除密钥会删除相关的值,但要添加,您需要一个值,而不仅仅是一个密钥。