ArrayList 和 LinkedList 新增、删除、修改花费时间的比较

简易代码如下: 

        List<Integer> arrayList = new ArrayList<Integer>();
        List<Integer> linkedList = new LinkedList<>();

        long addArrayTailStart = System.currentTimeMillis();
        for (int i = 0; i < 1000000; i++) {
            arrayList.add(i);
        }
        long addArrayTailEnd = System.currentTimeMillis();
        System.out.println("arrayList 从集合尾部新增花费时间" + (addArrayTailEnd - addArrayTailStart));

        long addLinkedTailStart = System.currentTimeMillis();
        for (int i = 0; i < 1000000; i++) {
            linkedList.add(i);
        }
        long addLinkedTailEnd = System.currentTimeMillis();
        System.out.println("linkedList 从集合尾部新增花费时间" + (addLinkedTailEnd - addLinkedTailStart));
        System.out.println("--------------------------------------------------------");

        long addArrayMidleStart = System.currentTimeMillis();
        for (int i = 0; i < 1000; i++) {
            arrayList.add(500000+ i, i);
        }
        long addArrayMidleEnd = System.currentTimeMillis();
        System.out.println("arrayList 从集合中间新增花费时间" + (addArrayMidleEnd - addArrayMidleStart));

        long addLinkedMidleStart = System.currentTimeMillis();
        for (int i = 0; i < 1000; i++) {
            linkedList.add(500000+ i, i);
        }
        long addLinkedMidleEnd = System.currentTimeMillis();
        System.out.println("linkedList 从集合中间新增花费时间" + (addLinkedMidleEnd - addLinkedMidleStart));

        System.out.println("--------------------------------------------------------");

        long addArrayHeadStart = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            arrayList.add(i, i);
        }
        long addArrayHeadEnd = System.currentTimeMillis();
        System.out.println("arrayList 从集合头部新增花费时间" + (addArrayHeadEnd - addArrayHeadStart));


        long addLinkedHeadStart = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            linkedList.add(i, i);
        }
        long addLinkedHeadEnd = System.currentTimeMillis();
        System.out.println("linkedList 从集合头部新增花费时间" + (addLinkedHeadEnd - addLinkedHeadStart));

        System.out.println("--------------------开始测删除,此时arrayList大小:"+arrayList.size()+",linkedList大小"+linkedList.size()+"------------------------------------");

        long delArrayTailStart = System.currentTimeMillis();
        for (int i = 1100999; i >= 1000000; i--) {
            arrayList.remove(i);
        }
        long delArrayTailEnd = System.currentTimeMillis();
        System.out.println("arrayList 从集合尾部删除花费时间" + (delArrayTailEnd - delArrayTailStart));

        long delLinkedTailStart = System.currentTimeMillis();
        for (int i = 1100999; i >= 1000000; i--) {
            linkedList.remove(i);
        }
        long delLinkedTailEnd = System.currentTimeMillis();
        System.out.println("linkedList 从集合尾部删除花费时间" + (delLinkedTailEnd - delLinkedTailStart));
        System.out.println("--------------------------------------------------------");

        long delArrayMidleStart = System.currentTimeMillis();
        for (int i = 495000; i < 505000; i++) {
            arrayList.remove(i);
        }
        long delArrayMidleEnd = System.currentTimeMillis();
        System.out.println("arrayList 从集合中间删除花费时间" + (delArrayMidleEnd - delArrayMidleStart));

        long delLinkedMidleStart = System.currentTimeMillis();
        for (int i = 495000; i < 505000; i++) {
            linkedList.remove(i);
        }
        long delLinkedMidleEnd = System.currentTimeMillis();
        System.out.println("linkedList 从集合中间删除花费时间" + (delLinkedMidleEnd - delLinkedMidleStart));

        System.out.println("--------------------------------------------------------");

        long delArrayHeadStart = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            arrayList.remove(i);
        }
        long delArrayHeadEnd = System.currentTimeMillis();
        System.out.println("arrayList 从集合头部删除花费时间" + (delArrayHeadEnd - delArrayHeadStart));


        long delLinkedHeadStart = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            linkedList.remove(i);
        }
        long delLinkedHeadEnd = System.currentTimeMillis();
        System.out.println("linkedList 从集合头部删除花费时间" + (delLinkedHeadEnd - delLinkedHeadStart));

        System.out.println("--------------------新增删除测试完毕,此时arrayList大小:"+arrayList.size()+",linkedList大小"+linkedList.size()+"------------------------------------");


        long updateArrayTailStart = System.currentTimeMillis();
        for (int i = 970000; i < 980000; i++) {
            arrayList.set(i, i);
        }
        long updateArrayTailEnd = System.currentTimeMillis();
        System.out.println("arrayList 从集合尾部修改花费时间" + (updateArrayTailEnd - updateArrayTailStart));

        long updateLinkedTailStart = System.currentTimeMillis();
        for (int i = 970000; i < 980000; i++) {
            linkedList.set(i, i);
        }
        long updateLinkedTailEnd = System.currentTimeMillis();
        System.out.println("linkedList 从集合尾部修改花费时间" + (updateLinkedTailEnd - updateLinkedTailStart));
        System.out.println("--------------------------------------------------------");

        long updateArrayMidleStart = System.currentTimeMillis();
        for (int i = 485000; i < 495000; i++) {
            arrayList.set(i, i);
        }
        long updateArrayMidleEnd = System.currentTimeMillis();
        System.out.println("arrayList 从集合中间修改花费时间" + (updateArrayMidleEnd - updateArrayMidleStart));

        long updateLinkedMidleStart = System.currentTimeMillis();
        for (int i = 485000; i < 495000; i++) {
            linkedList.set(i, i);
        }
        long updateLinkedMidleEnd = System.currentTimeMillis();
        System.out.println("linkedList 从集合中间修改花费时间" + (updateLinkedMidleEnd - updateLinkedMidleStart));
        System.out.println("--------------------------------------------------------");

        long updateArrayHeadStart = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            arrayList.set(i, i);
        }
        long updateArrayHeadEnd = System.currentTimeMillis();
        System.out.println("arrayList 从集合头部修改花费时间" + (updateArrayHeadEnd - updateArrayHeadStart));


        long updateLinkedHeadStart = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            linkedList.set(i, i);
        }
        long updateLinkedHeadEnd = System.currentTimeMillis();
        System.out.println("linkedList 从集合头部修改花费时间" + (updateLinkedHeadEnd - updateLinkedHeadStart));

结果如下:

arrayList 从集合尾部新增花费时间24
linkedList 从集合尾部新增花费时间53
--------------------------------------------------------
arrayList 从集合中间新增花费时间91
linkedList 从集合中间新增花费时间1506
--------------------------------------------------------
arrayList 从集合头部新增花费时间8414
linkedList 从集合头部新增花费时间5654
--------------------开始测删除,此时arrayList大小:1101000,linkedList大小1101000------------------------------------
arrayList 从集合尾部删除花费时间3
linkedList 从集合尾部删除花费时间9
--------------------------------------------------------
arrayList 从集合中间删除花费时间398
linkedList 从集合中间删除花费时间18090
--------------------------------------------------------
arrayList 从集合头部删除花费时间803
linkedList 从集合头部删除花费时间56
--------------------新增删除测试完毕,此时arrayList大小:980000,linkedList大小980000------------------------------------
arrayList 从集合尾部修改花费时间0
linkedList 从集合尾部修改花费时间55
--------------------------------------------------------
arrayList 从集合中间修改花费时间0
linkedList 从集合中间修改花费时间19897
--------------------------------------------------------
arrayList 从集合头部修改花费时间1
linkedList 从集合头部修改花费时间56

由此可见,在新增和删除时,操作头部元素时,linkedList实际性能优于arrayList,在操作中间或尾部元素时,arrayList性能优于linkedList。修改无论操作什么位置的元素,都是arrayList优于linkedList

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值