【问题标题】:Unsupported add/addAll operations for Map<K,V>.keySet()Map<K,V>.keySet() 的 add/addAll 操作不受支持
【发布时间】:2015-05-31 07:50:07
【问题描述】:

关于Map&lt;K,V&gt;接口:

为什么keySet()返回支持remove操作但不支持add()addAll()操作的Set

【问题讨论】:

    标签: java dictionary set keyset unsupportedoperation


    【解决方案1】:

    keySet 返回的SetMap 支持,因此对地图的更改是 反映在集合中,反之亦然。这意味着在 Set 上调用 remove 会从 Map 中删除匹配的 Entry

    Set 上调用addaddAll 是没有意义的,因为您无法将没有相应值[s] 的键[s] 添加到Map

    【讨论】:

      【解决方案2】:

      想想你的要求:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-10
          • 2011-04-21
          • 1970-01-01
          • 1970-01-01
          • 2021-06-17
          • 2019-07-30
          • 2019-01-23
          • 1970-01-01
          相关资源
          最近更新 更多