日期:2014-05-20  浏览次数:20600 次

List<List<String>> 后加元素覆盖
public class listlistText {
public static void main(String[] args) {

List<List<String>> list0 = new ArrayList<List<String>>();
List<String> list1 = new ArrayList<String>();
list1.add("ZS");
list0.add(list1);
System.out.println("&&&&&&&&&&&0"+list0.toString());  //输出[[ZS]]

// List<String> list2 = new ArrayList<String>();
list1.clear();
System.out.println("&&&&&&&&&&&1"+list0.toString());  //输出[[]]
list1.add("LS");
list0.add(list1);
System.out.println("&&&&&&&&&&&2"+list0.toString());  //输出[[LS], [LS]]

// List<String> list3 = new ArrayList<String>();
list1.clear();
System.out.println("&&&&&&&3"+list0.toString());  //输出[[], []]
list1.add("WW");
list0.add(list1);

System.out.println("&&&&&&&4"+list0.toString()); //输出[[WW], [WW], [WW]]

}
}



------解决方案--------------------
这不是覆盖,这个由于引用地址的原因
原本list0的0位置指向list1  list1中添加ZS,打印当然是ZS,然后你clear掉list1,所以打印为空,后来list1中加入LS,然后又在list0的1位置指向list1,相当于list0中的0和1同时指向list1的内存地址,所以打印就是[[LS],[LS]]了撒,下面就是一样的道理了