• Java集合(六)--ArrayList、LinkedList和Vector对比


    在前两篇博客,学习了ArrayList和LinkedList的源码,地址在这:

    Java集合(五)--LinkedList源码解读

    Java集合(四)--基于JDK1.8的ArrayList源码解读

      这篇文章,对比一下ArrayList和LinkedList和Vector,主要是前面两个,因为Vector很少使用,如果考虑并发安全,也会使用

    CopyOnWriteArrayList

    ArrayList和LinkedList的对比:插入、修改、删除、遍历

    顺序插入add(Object):

      1、ArrayList效率无疑是最好的,elementData[size++] = e;

      2、LinkedList相对而言略逊一筹,因为需要new Node(),如果对象比较大的时候,效率相对而言还是低的

    非顺序插入add(index, Object):

      1、ArrayList通过System.arraycopy()方法,把index后面的所有数据都前移一位,如果数据量多,你还要插入到首位,是不是要绝望了。。。

      2、LinkedList无论插入到任何位置,只需要通过index找到node节点(这个过程使用二分法,越靠近中间的数据,效率越低),改变前后指向关系即可

    我想,非顺序插入LinkedList效率无疑更好一点,但如果插入的index很靠近尾部,ArrayList肯定更好一点,因为前移的数据量很少了

    修改set(index, object):

      1、ArrayList得到index对应value,直接替换即可

      2、LinkedList的消耗还是来自于通过index寻找节点的过程

    ArrayList更好一点

    删除remove(int):

      1、ArrayList还是需要把index后面的所有数据都前移一位

      2、LinkedList的消耗还是来自于通过index寻找节点的过程

    删除remove(Object):

      1、ArrayList首先遍历得到Object对应的index,然后把index后面的所有数据都前移一位

      2、LinkedList首先遍历得到Object对应的index,然后直接改变前后指向关系即可

    for循环:

      1、ArrayList使用普通for循环效率最高,而且foreach循环效率没有很大

      2、LinkedList使用Iterator效率最好,普通for循环在大数据量的情况,慢的令人发指

    ArrayList使用for循环和LinkedList使用Iterator进行遍历,前者效率稍高

    综上:

      ArrayList适合顺序插入或者靠近尾部的插入,修改,而且可能发生扩容,效率会降低

      LinkedList适合非顺序插入,特别是靠近两端的位置,但是如果很靠近尾部,ArrayList的效率不会比LinkedList低,没有扩容的概念

    删除方面:

      ArrayList寻址比较快,而数据迁移效率比较低

      LinkedList寻址比较慢,但是只需要改变前后指向关系

    至于修改:

      肯定是ArrayList效率更高的

  • 相关阅读:
    产品中常用理论
    Mac下配置环境变量
    Maven仓库
    深入理解Spring中的各种注解
    JAVA中简单字符串分割
    WARN: HHH000277: Could not bind factory to JNDI
    dos命令窗口下下java命令提示找不到或无法加载主类
    数组实用类:Arrays
    数组
    线程创建方式
  • 原文地址:https://www.cnblogs.com/huigelaile/p/11059913.html
Copyright © 2020-2023  润新知