ArrayList存储数据注意事项
目的是想存放List集合000,111,222,333,444放入res中,但是下面的代码输出结果是444,444,444,444
public static void main(String[] args) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> li = new ArrayList<>();
int n=5;
while(n-->0){
li.clear();
li.add(n);
li.add(n);
li.add(n);
res.add(li);
}
for(List<Integer> list : res){
System.out.print(list.get(0));
System.out.print(list.get(1));
System.out.println(list.get(2));
}
}
正解
将用于存储数据的li 每次新建即可
public static void main(String[] args) {
List<List<Integer>> res = new ArrayList<>();
int n=5;
while(n-->0){
List<Integer> li = new ArrayList<>();
li.add(n);
li.add(n);
li.add(n);
res.add(li);
}
for(List<Integer> list : res){
System.out.print(list.get(0));
System.out.print(list.get(1));
System.out.println(list.get(2));
}
}
原因:因为数组的地址是不会发生变化的,每次在数组中的内容改变后,将数组添加到ArrayList中时,会导致ArrayList中的每个内容都是最后添加进去的数据