这是我的代码。
public class Test {
public static void main(String[] args) {
ArrayList<Integer> temp = new ArrayList<Integer>();
HashMap<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();
int serialno = 0;
for (int i = 1000; i < 1004; i++) {
temp.clear();
temp.add(i);
temp.add((i+1000));
map.put(serialno++, temp);
}
System.out.println(map);
}
}
我希望输出为
{0=[1000, 2000], 1=[1001, 2001], 2=[1002, 2002], 3=[1003, 2003]}
但我将输出视为
{0=[1003, 2003], 1=[1003, 2003], 2=[1003, 2003], 3=[1003, 2003]}
这里发生了什么。我哪里出错了??
答案 0 :(得分:2)
清除ArrayList temp
时,您所做的只是删除它的值。但是,当您将ArrayList放入地图时,实际上是将ArrayList的对象引用放入地图中,而不是一个带有新值的新列表。所以在你的地图中是相同ArrayList的四倍(因此是相同值的四倍)。
HashMap<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();
int serialno = 0;
for (int i = 1000; i < 1004; i++) {
ArrayList<Integer> temp = new ArrayList<Integer>();
temp.add(i);
temp.add((i + 1000));
System.out.println(i + 1000);
map.put(serialno++, temp);
}
System.out.println(map);
在每个循环中创建一个新List时,实际上会在地图中放置不同的ArrayLists(带有不同的引用)。
答案 1 :(得分:1)
您只创建了ArrayList
的一个对象,并将其多次加到HashMap
中,这样您就可以在HashMap
中对同一个对象进行多次引用,但是您需要多个ArrayList
{ {1}}对象,因此您必须在循环中创建它们。
public class Test {
public static void main(String[] args) {
HashMap<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();
int serialno = 0;
for (int i = 1000; i < 1004; i++) {
ArrayList<Integer> temp = new ArrayList<Integer>();
temp.add(i);
temp.add((i+1000));
map.put(serialno++, temp);
}
System.out.println(map);
}
}