0
public static HashMap<ArrayList<Integer>, String> map = new HashMap<ArrayList<Integer>, String>();  
public static ArrayList<ArrayList<Integer>> keys = new ArrayList<>(map.keySet());

然后在main

map.put(key, "c");

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

我怎样才能使关系keys更牢固,以便它实际上与 HashMap 绑定并包含其所有键。

4

2 回答 2

3

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

我可以想到3个选项:

  • 编写自己的地图实现,嵌入 ArrayList 并使其保持最新
  • 每次更新地图时手动更新 ArrayList
  • 根本不使用 ArrayList (keySet()当您需要访问密钥时是否存在,所以我不确定您为什么需要一个)
于 2012-12-09T07:33:38.640 回答
0

你不能。

Map.keySet()返回 Map 的当前键集,然后将其加载到列表中。之后对地图的更改对列表的内容没有影响。


如果需要,大多数人只会重新获得密钥集。你为什么不这样做呢?

于 2012-12-09T07:33:39.170 回答