Java:显式设置hashmap的键并保持对它的引用

Java:显式设置hashmap的键并保持对它的引用,java,Java,(假设键是有效的ArrayList)。但是键在那之后仍然有大小0 如何增强键的关系,使其实际绑定到HashMap并包含其所有键。ArrayList的复制构造函数将映射中的所有键复制到ArrayList,但如果在该点之后更改映射,它将不会被反映出来 我可以想出3种选择: 编写自己的映射实现,嵌入ArrayList并使其保持最新 每次更新地图时手动更新ArrayList 根本不要使用ArrayList(keySet()在您需要访问密钥时就在那里,所以我不确定您为什么需要一个) ArrayList的

(假设
是有效的ArrayList)。但是
在那之后仍然有大小0


如何增强
键的关系,使其实际绑定到HashMap并包含其所有键。

ArrayList的复制构造函数将映射中的所有键复制到ArrayList,但如果在该点之后更改映射,它将不会被反映出来

我可以想出3种选择:

  • 编写自己的映射实现,嵌入ArrayList并使其保持最新
  • 每次更新地图时手动更新ArrayList
  • 根本不要使用ArrayList(
    keySet()
    在您需要访问密钥时就在那里,所以我不确定您为什么需要一个)

ArrayList的复制构造函数将映射中的所有键复制到ArrayList,但如果在该点之后更改映射,则不会反映该键

我可以想出3种选择:

  • 编写自己的映射实现,嵌入ArrayList并使其保持最新
  • 每次更新地图时手动更新ArrayList
  • 根本不要使用ArrayList(
    keySet()
    在您需要访问密钥时就在那里,所以我不确定您为什么需要一个)
    • 你不能

      Map.keySet()
      返回映射的当前密钥集,然后将其加载到列表中。之后对映射所做的更改对列表的内容没有影响


      如果需要,大多数人都会重新设置钥匙。你为什么不那样做呢?

      你不能

      Map.keySet()
      返回映射的当前密钥集,然后将其加载到列表中。之后对映射所做的更改对列表的内容没有影响



      如果需要,大多数人都会重新设置钥匙。你为什么不这样做呢?

      [keySetˋ确实返回了一个更新的视图](.这不是快照。@JoachimSauer Holy
      ***
      。我没有意识到。我在回答中后退了一步,只是“重新获取它”[keySetˋ确实返回了一个更新的视图](.这不是快照。@JoachimSauer Holy
      ******
      。我没有意识到。我在回答“重新获得它”时后退了一步
      public static HashMap<ArrayList<Integer>, String> map = new HashMap<ArrayList<Integer>, String>();  
      public static ArrayList<ArrayList<Integer>> keys = new ArrayList<>(map.keySet());
      
      map.put(key, "c");