精华内容
下载资源
问答
  • arraylist和linkedlist区别
    千次阅读
    2022-03-24 11:32:32

    1、首先他们底层数据结构不一样,ArrayList底层结构是数组,LinkedList底层结构是链表;
    2、数据结构决定了,ArrayList在查询上的效率较高,而LinkedList在删除和添加上的效率更高;(需要注意的一点是,如果添加的时候链表比较长的话,由于需要遍历的成本在内,LinkedList不一定更快)
    3、都实现了List接口,但是LinkedList还额外实现了Deque的接口,可以当队列来使用。

    更多相关内容
  • 一般大家都知道ArrayList和LinkedList的大致区别:  1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。  2.对于随机访问getset,ArrayList觉得优于LinkedList,因为LinkedList要...
  • 主要介绍了ArrayList和LinkedList区别及使用场景代码解析,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
  • ArrayList和LinkedList区别

    千次阅读 2020-03-14 20:23:05
    LinkedList:双向链表,不是连续的内存空间,基于链表的数据结构,每一个元素都是与前一个后一个元素相连的。(由链表的特性决定); 2、性能区别ArrayList:查询快,因为是连续的内存空间,方便寻址,但是删除,...

    1、底层数据结构的差异:
    ArrayList:数组,连续的一块内存空间,基于动态数组;
    LinkedList:双向链表,不是连续的内存空间,基于链表的数据结构,每一个元素都是与前一个和后一个元素相连的。(由链表的特性决定);

    2、性能区别:
    ArrayList:查询快,因为是连续的内存空间,方便寻址,但是删除,插入效率慢,因为需要发生数据迁移;
    LinkedList:查询慢,因为需要通过指针一个个寻址,但是删除和插入快,因为只要改变前后节点的指针即可;

    3、添加、删除、修改分析
    (1)ArrayList:
    (a)添加,添加到末尾,正常不需要做什么特别的处理,除非现有的数组空间不够,需要扩容;
    (b)添加到其他位置(可以理解为插入),这个时候就需要做数据的整体迁移,效率不高;
    (c)修改,修改之前必须先定位,因为ArrayList是数组(一段连续的内存空间),因此它的查询,定位效率很高;
    (d)删除,删除末尾,不需要数据的迁移;但是删除其他位置,这时候就需要数据的迁移;
    (2)LinkedList:
    (a)添加,第一种情况是添加到末尾,创建一个新的节点,将之前的last节点设置为新节点的pre,新节点设置为last;第二种情况是添加到其他位置,这个时候只需要调整前后节点的引用指向;

    ArrayList分析:

    jdk 7 情况下:
    ArrayList list = new ArrayList();//底层创建了长度是10的Object[]数组elementData; list.add(123);//elementData[0] = new Integer(123);
    list.add(11);//如果此次的添加导致底层elementData数组容量不够,则扩容。默认情况下,扩容为原来的容量的1.5倍(使用位运算符右移一位),同时需要将原有数组中的数据复制到新的数组中。
    结论:建议开发中使用带参的构造器:ArrayList list = new ArrayList(int capacity)

    jdk 8 中ArrayList的变化:
    ArrayList list = new ArrayList();//底层Object[] elementData初始化为{}.并没有创建长度为10的数组
    list.add(123);//第一次调用add()时,底层才创建了长度10的数组,并将数据123添加到elementData[0]
    后续的添加和扩容操作与 jdk 7 无异。
    小结:jdk7中的ArrayList的对象的创建类似于单例的饿汉式,而jdk8中的ArrayList的对象的创建类似于单例的懒汉式,延迟了数组的创建,节省内存。

    LinkedList分析:

    LinkedList list = new LinkedList(); //内部声明了Node类型的first和last属性,默认值为null
    list.add(123);//将123封装到Node中,创建了Node对象。
    其中,Node定义为:
    private static class Node {
    E item;
    Node next;
    Node prev;
    Node(Node prev, E element, Node next) {
    this.item = element;
    this.next = next;
    this.prev = prev;
    }
    }
    体现了LinkedList的双向链表的说法

    展开全文
  • ArrayList和LinkedList区别

    工作中,大家是不是经常分不清楚,什么时候用ArrayList,什么时候用LinkedList?

    所以我们应该弄清楚ArrayList和LinkedList之间的区别,然后才知道工作中该如何选型。

    一、ArrayList和LinkedList查询之间的区别

    首先,从名字就可以看出,ArrayList和LinkedList的区别,ArrayList是基于数组的,LinkedList是基于链表的。

    从这一点,我们可以推理出来,ArrayList适合查询,LinkedList适合插入,但是这只是一个广泛的结论,我们应该了解的更细致一点。

    比如,对于ArrayList,它真正的优点是按下标查询元素,相比于LinkedList,LinkedList也可以按下标查询元素,但是LinkedList需要对底层链表进行遍历,才能找到指定下标的元素,而ArrayList不用,所以这是ArrayList的优点。

    但是,如果我们讨论的是获取第一个元素,或最后一个元素,ArrayList和LinkedList在性能上是没有区别的,因为LinkedList中有两个属性分别记录了当前链表中的头结点和尾结点,并不需要遍历链表。

    以上,是对于ArrayList和LinkedList在查询方面的区别。
    ————————————————
    二、ArrayList和LinkedList插入之间的区别

    我们再来研究一下在插入方面的区别:

    ArrayList可以插入到指定下标位置,或者数组末尾,这种插入普通情况下是很快的,但是如果某次插入操作触发了扩容,那么本次插入就增加了额外的扩容成本。

    对于LinkedList,如果是插在链表的头部或者是尾部都是很快的,因为LinkedList中有单独的属性记录的链表的头结点和尾结点,不过,如果是插在指定下标位置,那么就需要遍历链表找到指定位置,从而降低了效率。

    但是,使用LinkedList是不用担心扩容问题的,链表是不需要扩容的。
    ————————————————

    综上所述:
    1.默认情况下,比如调用ArrayList和LinkedList的add(e)方法,都是插入在最后,如果这种操作比较多,那么就用LinkedList,因为不涉及到扩容。

    2.如果调用ArrayList和LinkedList的add(index, e)方法比较多,就要具体考虑了,因为ArrayList可能会扩容,LinkedList需要遍历链表,这两种到底哪种更快,是没有结论的,得具体情况具体分析。

    3.还有,如果是插入场景比较少,但经常需要查询的话,查询分两种,第一种就是普通遍历,也就是经常需要对List中的元素进行遍历,那么这两种是区别不大的,遍历链表和遍历数组的区别,第二种就是经常需要按指定下标获取List中的元素,如果这种情况如果比较多,那么就用ArrayList。

    4.LinkedList还有一个特殊功能,LinkedList可以当做双端队列使用,这个是ArrayList不具备的。

    这一点从源码也是看得出来的,ArrayList和LinkedList都实现了List接口,但是LinkedList还额外实现了Deque接口。

    以上,是对ArrayList和LinkedList在查询和插入之间的分析和对比。
    大家如果还有其他对比思路或想法,可留言进行讨论。

    展开全文
  • ArrayList和LinkedList区别?看完秒懂~

    万次阅读 多人点赞 2022-04-11 18:27:59
    工作中,大家是不是经常分不清楚,什么时候用ArrayList,什么时候用LinkedList

    工作中,大家是不是经常分不清楚,什么时候用ArrayList,什么时候用LinkedList?

    所以我们应该弄清楚ArrayList和LinkedList之间的区别,然后才知道工作中该如何选型。

    一、ArrayList和LinkedList查询之间的区别

    首先,从名字就可以看出,ArrayList和LinkedList的区别,ArrayList是基于数组的,LinkedList是基于链表的。

    从这一点,我们可以推理出来,ArrayList适合查询,LinkedList适合插入,但是这只是一个广泛的结论,我们应该了解的更细致一点。

    比如,对于ArrayList,它真正的优点是按下标查询元素,相比于LinkedList,LinkedList也可以按下标查询元素,但是LinkedList需要对底层链表进行遍历,才能找到指定下标的元素,而ArrayList不用,所以这是ArrayList的优点。

    但是,如果我们讨论的是获取第一个元素,或最后一个元素,ArrayList和LinkedList在性能上是没有区别的,因为LinkedList中有两个属性分别记录了当前链表中的头结点和尾结点,并不需要遍历链表。

    以上,是对于ArrayList和LinkedList在查询方面的区别。

    二、ArrayList和LinkedList插入之间的区别

    我们再来研究一下在插入方面的区别:

    ArrayList可以插入到指定下标位置,或者数组末尾,这种插入普通情况下是很快的,但是如果某次插入操作触发了扩容,那么本次插入就增加了额外的扩容成本。

    对于LinkedList,如果是插在链表的头部或者是尾部都是很快的,因为LinkedList中有单独的属性记录的链表的头结点和尾结点,不过,如果是插在指定下标位置,那么就需要遍历链表找到指定位置,从而降低了效率。

    但是,使用LinkedList是不用担心扩容问题的,链表是不需要扩容的。

    综上:

    1.默认情况下,比如调用ArrayList和LinkedList的add(e)方法,都是插入在最后,如果这种操作比较多,那么就用LinkedList,因为不涉及到扩容。

    2.如果调用ArrayList和LinkedList的add(index, e)方法比较多,就要具体考虑了,因为ArrayList可能会扩容,LinkedList需要遍历链表,这两种到底哪种更快,是没有结论的,得具体情况具体分析。

    3.还有,如果是插入场景比较少,但经常需要查询的话,查询分两种,第一种就是普通遍历,也就是经常需要对List中的元素进行遍历,那么这两种是区别不大的,遍历链表和遍历数组的区别,第二种就是经常需要按指定下标获取List中的元素,如果这种情况如果比较多,那么就用ArrayList

    以上,是对ArrayList和LinkedList在查询和插入之间的分析和对比。

    大家如果还有其他对比思路或想法,可留言进行讨论。

    另外,LinkedList还有一个特殊功能,LinkedList可以当做双端队列使用,这个是ArrayList不具备的。

    这一点从源码也是看得出来的,ArrayList和LinkedList都实现了List接口,但是LinkedList还额外实现了Deque接口。

    这个问题也是阿里面试的真题,希望大家有所收获,下面给大家分享大厂面试真题。欢迎扫下方名片来领取

     

    展开全文
  • 【Java面试题】ArrayList和LinkedList区别
  • ArrayList和LinkedList区别及使用场景 区别 ArrayList LinkedList 数据结构上 基于数组实现 基于双链表实现的,是ListDeque接口(Deque接口是Queue接口的子接口)的实现类,不仅可以根据索引来随机访问...
  • ArrayList LinkedList区别

    千次阅读 2022-03-21 15:48:31
    1. 首先,他们的底层结构不同。 ...正因为底层数据结构的不同,他们适用的场景不同,ArrayList 更适合随即查找,LinkedList 更适合删除添加,查询、添加、删除的时间复杂度不同。 2. ArrayList
  • 1、ArrayList和LinkedList区别 众所周知,甚至顾名思义我们都知道,ArrayList和LinkedList一个是数组型集合一个是链表型集合。 于是,在搞清楚它们的区别时,我们不妨先看看数组链表的区别: 1.1、数组与链表 ...
  • arraylist和linkedlist区别

    千次阅读 2022-02-04 14:27:18
    ArrayList和linkedlist区别,以及ArrayList扩容机制
  • 2.1 ArrayList 数据结构方面: ArrayList 是基于动态数组;ArrayList 的底层是封装了一个动态数组,也是由普通的数组演化来的; //普通数组 int[] a = new int[5]; ArrayList 是连续的内存存储,对内存...
  • 1. 首先,他们的底层数据结构不同,...3. 另外ArrayList和LinkedList都实现了List接口,但是LinkedList还额外实现了 Deque接口,所以LinkedList还可以当做队列来使用 ArrayLis 基于动态数组,连续内存存储.
  • ArrayList和LinkedList的异同点以及使用区别
  • 1.首先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层...3.另外ArrayList和LinkedList都实现了List接口,但是LinkedList还额外实现了Deque接口,所以LinkedList还可以当做队列来使用。 ...
  • Java中的ArrayList和LinkedList区别
  • 在Java中虽然ArrayList和LinkedList都实现了List接口,但是其底层原理不相同。 ArrayList的底层是一个数组,LinkedList的底层是链表。 ArrayList在增加删除元素时,时间复杂度是O(N)。 LinkedList则是O(1),...
  • Java Arraylist和Linkedlist区别

    千次阅读 2022-03-14 17:23:46
    前言:ArrayList和LinkedList 是List接口下两个最常用的实现类,也是面试时,面试官最爱问的两个集合类。 ArrayList:讲这个我们先从底层数据机构开始,首先ArrayList底层是基于数组实现的,学过数据结构的应该都...
  • ArrayList和LinkedList区别和联系 在一个多月之前,我曾写过一篇博客想要迅速简洁的了解Java中所有的集合类型(List、Set、Map),然后一个月多后的我不得已又抱起《Java核心卷I 》仔细研读,这是为什么呢???...
  • ArrayListLinkedList区别

    2022-03-22 21:35:08
    1. LinkedList和ArrayList差别主要来自于Array和LinkedList数据结构的不同。ArrayList是基于数组实现的,LinkedList是基于双链表实现的。另外LinkedList类不仅是List接口的实现类,可以根据索引来随机访问集合中的...
  • ArrayList和LinkedList的底层实现和区别

    千次阅读 2022-04-05 13:46:09
    ArrayList:底层结构是基于动态数组实现的,对内存的要求比较高,需要连续的内存空间,ArrayLsit一般用于查询,它可以根据下标查询,查询比较快,但因为它是连续的空间,增删比较慢 LinkedList:底层结构是双向链表...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 172,368
精华内容 68,947
关键字:

arraylist和linkedlist区别