ArrayList和LinkedList的性能比较

关于ArrayList和LinkedList的查询、添加(尾部添加、中间添加)所耗费的时间进行测试,验证LinkedList和ArrayList添加操作到底谁更快!实践才是检验真理的唯一标准!

1.首先是查询的测试(测试数据10w条):毫无疑问ArrayLink遥遥领先

List<Integer> arrList = new ArrayList<>();
    List<Integer> linkList = new LinkedList<>();

    private void getArray(){
        for (int i = 0; i < 100000; i++) {
            arrList.add(i);
        }
        long start = System.currentTimeMillis();
        for (int i = 0; i < arrList.size(); i++) {
            arrList.get(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("ArrayList所花费的时间:"+(end - start));
    }

    private void getLinked(){
        for (int i = 0; i < 100000; i++) {
            linkList.add(i);
        }
        long start = System.currentTimeMillis();
        for (int i = 0; i < linkList.size(); i++) {
            linkList.get(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("LinkedList所花费的时间:"+(end - start));
    }

所耗费的时间:

 

2. 尾部插入测试(测试数据1000w条):多次运行发现-->ArrayList比LinkedList会好上一点

private void addArray(){
        long start = System.currentTimeMillis();
        for (int i = 0; i < 10000000; i++) {
            arrList.add(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("ArrayList所花费的时间:"+(end - start));
    }

    private void addLinked(){
        long start = System.currentTimeMillis();
        for (int i = 0; i < 10000000; i++) {
            linkList.add(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("LinkedList所花费的时间:"+(end - start));
    }

 运行结果:

 3.中间位置插入(先插入50w条数据,再在0、1、2、3...i-1位置插入50w条数据)结果如何呢?

 

private void addIndexArray(){
        for (int i = 0; i < 500000; i++) {
            arrList.add(i);
        }
        long start = System.currentTimeMillis();
        for (int i = 1; i < 500001; i++) {
            arrList.add(i-1,i);
        }
        long end = System.currentTimeMillis();
        System.out.println("ArrayList所花费的时间:"+(end - start));
    }


    private void addIndexLinked(){
        for (int i = 0; i < 500000; i++) {
            linkList.add(i);
        }
        long start = System.currentTimeMillis();
        for (int i = 1; i < 500001; i++) {
            linkList.add(i-1,i);
        }
        long end = System.currentTimeMillis();
        System.out.println("LinkedList所花费的时间:"+(end - start));
    }

结果:

结果竟然还是ArrayList的速度快,而且还是快很多,这可能只是个例,但是却推翻了一直以来大众的固有印象:频繁添加用LinkedList。所以以后要用到时还需具体的测试。 

以至于为什么ArrayList的综合性能更好,这就不得不说下操作系统的局部性原理了,感兴趣的同学可以去翻阅《深入理解计算机系统》。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值