ArrayList和LinkedList区别是什么

        (涉及代码均是JDK1.8版本下的源码。)

       首先看下ArrayList。

  1. ArrayList继承了List接口,
  2. 底层是数组实现,所以查询指定下标的数据时,效率很好

      3.  添加数据时,默认是直接插入到最后,效率也很快,

     4. 如果插入到指定位置,效率就要跟插入位置之后的数据量有关了,因为涉及到数据的平移复制,其实直接插入数据也不一定效率就高,

此外还要看是否需要扩容,如果需要扩容,也会降低操作效率

     接下来再看LinkedList。

  1. LinkedList继承了List和Deque接口,
  2. 由于实现了Deque接口,所以可以作为双端队列
  3. 底层是链表结构,遍历越靠后的数据花费时间越长,但是,由于底层实现了getFirst()和getLast(),所以链表的头结点和尾节点是一直有记录的,获取链表的第一个元素和最后一个元素可直接调用相应的方法,从而提高获取效率。

   4. LinkedList的新增元素默认也是插入到链表尾部,代码如下:

所以默认插入的效率还是很高的。其实LinkedList指定位置插入元素也很快,因为链表的插入操作会先判断是否是尾节点,是就直接插入到尾部,如果不是就遍历到指定位置然后插入元素即可,时间多花费在遍历上

所以不能单纯的说谁的效率更高,谁更适合增删改,谁更适合查询,要结合具体情况而定。只能说多数情况下,ArrayList更合适随机查找,LinkedList更适合频繁的删除和新增操作,至于时间复杂度每种操作和情况下各有不同。


版权声明:本文为AAAWell原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。