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);

}

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

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

你可能感兴趣的:(程序人生)