【发布时间】:2015-05-31 07:50:07
【问题描述】:
关于Map<K,V>接口:
为什么keySet()返回支持remove操作但不支持add()和addAll()操作的Set?
【问题讨论】:
标签: java dictionary set keyset unsupportedoperation
关于Map<K,V>接口:
为什么keySet()返回支持remove操作但不支持add()和addAll()操作的Set?
【问题讨论】:
标签: java dictionary set keyset unsupportedoperation
keySet 返回的Set 由Map 支持,因此对地图的更改是
反映在集合中,反之亦然。这意味着在 Set 上调用 remove 会从 Map 中删除匹配的 Entry。
在Set 上调用add 或addAll 是没有意义的,因为您无法将没有相应值[s] 的键[s] 添加到Map。
【讨论】:
想想你的要求:
您想要检索地图的所有 KEYS(并且该集合不是键的“副本”;它表示地图的键)。
然后您要求向这些 KEYS 添加元素。换句话说:您正在查看的“数据集”具有来自地图的键的语义含义。而且您想增加该“数据集” - 但不提供该地图的相应条目。
另一方面,删除是直截了当的;删除一个键也会从映射中删除相应的条目。
【讨论】:
这是因为集合中的每个键都链接到映射中的一个值。删除键将删除关联的值,但要添加,您需要一个值,而不仅仅是一个键。
【讨论】: