关于java Collections工具类

现在在看Thinking in java.

在Holding your object 章节,Adding groups of elements

看到了Collections.addAll() 方法。接触JAVA一年半,还不知道这个类,惭愧。委屈

有一句话写到:Collections.addAll() runs much faster, and it's just as easy to construct the Collection with no elements and then call Collections.addAll(),which use variable argument lists.

原来跟new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));这种写法相比,还有效率上的差异。马上实验了下。

public class TestAddAll {
	public static void main(String[] args) {
		long nanoTime1 = System.nanoTime();
		for (int i=0;i<10000;i++){
			List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
		}
		long nanoTime2 = System.nanoTime();
		for (int i=0;i<10000;i++){
			List<Integer> list2 = new ArrayList<Integer>();
			Collections.addAll(list2, 1,2,3,4,5);
		}
		long nanoTime3 = System.nanoTime();
		System.out.println(nanoTime2-nanoTime1);
		System.out.println(nanoTime3-nanoTime2);
	}
}

运行结果:

20106707
10501896

基本上效率是前者的2倍。证实了书上的话。

认识了之前没见过的工具类,而且还从性能上讲了该怎么用,不错。

之前用的时候,都是new出新类,然后一个一个add。看着就不舒服。而且我估计效率也会挺差。是骡子是马拉出来溜溜,于是代码变为

public class TestAddAll {
	public static void main(String[] args) {
		long nanoTime1 = System.nanoTime();
		for (int i=0;i<10000;i++){
			List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
		}
		long nanoTime2 = System.nanoTime();
		for (int i=0;i<10000;i++){
			List<Integer> list2 = new ArrayList<Integer>();
			Collections.addAll(list2, 1,2,3,4,5);
		}
		long nanoTime3 = System.nanoTime();
		for (int i=0;i<10000;i++){
			List<Integer> list3 = new ArrayList<Integer>();
			list3.add(1);
			list3.add(2);
			list3.add(3);
			list3.add(4);
			list3.add(5);
		}
		long nanoTime4 = System.nanoTime();
		System.out.println(nanoTime2-nanoTime1);
		System.out.println(nanoTime3-nanoTime2);
		System.out.println(nanoTime4-nanoTime3);
	}
}

运行结果:

19236681
9910838
4498013

傻眼了,原来的笨写法最快?不能吧。

是我的实验方法有什么问题么?还是我理解的书上说的应用情景错了?望高手指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值