1. 程式人生 > >java的ArrayList(1)

java的ArrayList(1)

問題:

ArrayList<Double> tp = new ArrayList<>();
ArrayList<ArrayList<Double>> tps = new ArrayList<ArrayList<Double>>();
while ((string = bReader.readLine()) != null){
	String[] strings = string.split(",");
	for(String s:strings){
		tp.add(Double.parseDouble(s)
); //1 } System.out.println("第"+i+"行:"); System.out.println(tp); System.out.println(); tps.add(tp); //2 tp.clear(); //3 }

上面1,2,3行程式碼中使用了ArrayList類的clear方法,當第3行clear時,變數tps中已經add的tp的值也會被clear掉!並且,下次while迴圈時,tps載入tp兩次,clear之後又被清除掉,依次迴圈,最終tps中都為null值。

解決:
當使用clear()方法也消耗很長的時間時,考慮建立一個新的列表,因為java可以很快的建立一個新的物件;
在列表長度很小的情況下(eg:10或100個元素),可以放心的使用這兩種方法clear或removeAll

。但如果列表很大(eg:10M個元素),那麼選擇clear還是removeAll會對你java應用的效能造成巨大的影響。甚至有時,在列表過大的情況下,重置會耗費許多時間,那麼重新建立一個新的列表比將老的列表重置要好。但需要提醒的是,必須要確保老的列表可以被垃圾回收。

關於回收:
如果這個物件沒有被 任何人 引用 它 ,就會被回收