使用put存储新的键值对时,现有键的Hashmap值会被覆盖.怎么预防呢?

coo*_*oad 2 java hashmap

        HashMap<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();
    ArrayList<Integer> al = new ArrayList<Integer>();//arraylist as value

    for (int j = 0; j < 3; j++) {
        for (int i = 0; i < 5; i++) {
            al.add(i + j);
        }
        System.out.println(al);
        System.out.println(j);//key value
        map.put(j, al);
        System.out.println(map);
        al.clear();
    }
Run Code Online (Sandbox Code Playgroud)

为什么最后一个值arraylist会被所有键覆盖?如何避免过度写作?

Bob*_*der 8

你需要移动这一行:

ArrayList<Integer> al = new ArrayList<Integer>();//arraylist as value
Run Code Online (Sandbox Code Playgroud)

在循环内.

您想ArrayList为每个对象创建,而不是仅为所有对象创建.

for (int j = 0; j < 3; j++) {
    ArrayList<Integer> al = new ArrayList<Integer>();
    for (int i = 0; i < 5; i++) {
        al.add(i + j);
    }
    System.out.println(al);
    System.out.println(j);//key value
    map.put(j, al);
    System.out.println(map);
}
Run Code Online (Sandbox Code Playgroud)

  • 不.它清除阵列,但你反复使用相同的阵列.使用"put"保存了arraylist引用,而不是副本,因此在放置之后更改arraylist实际上会更改地图值. (4认同)