ArrayList和LinkedList 增删查效率区别

学习了数组和链表结构的区别后,以一千万条数据测试。

代码如下:

// 数据条数
static int nums = 10000000;

public static void main(String[] args) {
    List arrayList = new ArrayList();
    List linkedList = new LinkedList();

    log.info("*****这里是从尾端add测试*****");
    long arrayStartTime = System.currentTimeMillis();
    for (int i = 0; i < nums; i++) {
        arrayList.add(i);
    }
    log.info("ArrayList结束,耗时:{}毫秒。", System.currentTimeMillis() - arrayStartTime);

    long linkedStartTime = System.currentTimeMillis();
    for (int i = 0; i < nums; i++) {
        linkedList.add(i);
    }
    log.info("LinkedList结束,耗时:{}毫秒。", System.currentTimeMillis() - linkedStartTime);

    log.info("*****这里是从头部add测试*****");
    long arrayStartTime1 = System.currentTimeMillis();
    arrayList.add(1, 111);
    log.info("ArrayList结束,耗时:{}毫秒。", System.currentTimeMillis() - arrayStartTime1);

    long linkedStartTime1 = System.currentTimeMillis();
    linkedList.add(1, 111);
    log.info("LinkedList结束,耗时:{}毫秒。", System.currentTimeMillis() - linkedStartTime1);

    log.info("*****这里是从尾部remove测试*****");
    long arrayStartTime2 = System.currentTimeMillis();
    arrayList.remove(9999999);
    log.info("ArrayList结束,耗时:{}毫秒。", System.currentTimeMillis() - arrayStartTime2);

    long linkedStartTime2 = System.currentTimeMillis();
    linkedList.remove(9999999);
    log.info("LinkedList结束,耗时:{}毫秒。", System.currentTimeMillis() - linkedStartTime2);
    System.out.println(arrayList.size());
    System.out.println(linkedList.size());

    log.info("*****这里是从尾部get测试*****");
    long arrayStartTime3 = System.currentTimeMillis();
    System.out.println(arrayList.get(9999999));
    log.info("ArrayList结束,耗时:{}毫秒。", System.currentTimeMillis() - arrayStartTime3);

    long linkedStartTime3 = System.currentTimeMillis();
    System.out.println(linkedList.get(9999999));
    log.info("LinkedList结束,耗时:{}毫秒。", System.currentTimeMillis() - linkedStartTime3);

}

测试结果
这次简单测试的结果:
1、ArrayList的查找性能绝对是一流的,无论查询的是哪个位置的元素
2、ArrayList除了尾部插入的性能较好外(位置越靠后性能越好),其他位置性能就不如人意了
3、LinkedList在头尾查找、插入性能都是很棒的,但是在中间位置进行操作的话,性能就差很远了,而且跟ArrayList完全不是一个量级的

关于第二条的解释,linkedlist是双链表结构,初始化会自动保存头、尾两节点,所以两端开始linkedlist插入性能较好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值