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();
}
为什么最后一个值arraylist会被所有键覆盖?如何避免过度写作?
答案 0 :(得分:8)
你需要移动这一行:
ArrayList<Integer> al = new ArrayList<Integer>();//arraylist as value
在循环中。
您想为每个对象创建ArrayList
,而不是仅为所有对象创建一个。{/ p>
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);
}
答案 1 :(得分:0)
只需清除它就无法重复使用旧的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);
}
:
HashMap
原因是ArrayList
会将所有条目指向相同的{{1}},每次运行都会覆盖这些条目。