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应用的性能造成巨大的影响。甚至有时,在列表过大的情况下,重置会耗费许多时间,那么重新创建一个新的列表比将老的列表重置要好。但需要提醒的是,必须要确保老的列表可以被垃圾回收。

关于回收:
如果这个对象没有被 任何人 引用 它 ,就会被回收

猜你喜欢

转载自blog.csdn.net/qian27enjoy/article/details/85345375