8

关于Map<K,V>界面:

为什么keySet()返回一个Set支持remove运算却不支持add()andaddAll()运算的?

4

3 回答 3

11

Set返回的由支持keySetMap因此对地图的更改会反映在集合中,反之亦然。这意味着调用removeSetEntryMap.

在. _ add_ _addAllSetMap

于 2015-05-31T07:52:05.710 回答
2

想想你的要求:

您想要检索地图的所有 KEYS(并且该集合不是键的“副本”;它代表地图的键)。

然后您要求向这些 KEYS 添加元素。换句话说:您正在查看的“数据集”具有来自地图的键的语义含义。并且您想增加该“数据集” - 但不提供该地图的相应条目。

另一方面,删除是直截了当的;删除一个键也会从映射中删除相应的条目。

于 2015-05-31T07:53:24.720 回答
2

这是因为集合中的每个键都链接到映射中的一个值。删除键将删除关联的值,但要添加,您需要一个值而不仅仅是一个键。

于 2015-05-31T07:54:41.860 回答