总结:ArrayList和LinkedList的分析与区别

版权声明:所有的文章均为读博客时整理的笔记,有错误的地方请指出,谢谢! https://blog.csdn.net/u013806366/article/details/84631792

类 ArrayList< E >

【所属包】:java.util
【父类结构】:
java.lang.Objectjava.util.AbstractCollection
java.util.AbstractList
java.util.ArrayList
【源码展示】

* <p>This class is a member of the
* <a href="{@docRoot}/../technotes/guides/collections/index.html">
* Java Collections Framework</a>.
*
* @author  Josh Bloch
* @author  Neal Gafter
* @see     Collection
* @see     List
* @see     LinkedList
* @see     Vector
* @since   1.2
*/

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
……
}

继承:AbstractList
实现:List, RandomAccess, Cloneable, java.io.Serializable
相关构造方法说明
a.ArrayList()构造一个初始容量为 10 的空列表。
b.ArrayList(int initialCapacity)构造一个具有指定初始容量initialCapacity的空列表。
c.ArrayList(Collection<? extends E> c)构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
ArrayList是List接口大小可变数组的实现,允许Null值

类 LinkedList < E >

**

【所属包】:java.util
【父类结构】:
--------java.lang.Objectjava.util.AbstractCollection
-----------java.util.AbstractList
-------------java.util.AbstractSequentialList
---------------java.util.LinkedList

【源码展示】

* @author  Josh Bloch
* @see     List
* @see     ArrayList
* @since 1.2
* @param <E> the type of elements held in this collection
*/

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
……
}
说明
继承:AbstractSequentialList实现:List, Deque, Cloneable, java.io.Serializable
构造方法说明:LinkedList()构造一个空列表
构造方法说明:LinkedList(Collection<? extends E> c)构造一个包含指定 collection 中的元素的列表,这些元素按其 collection 的迭代器返回的顺序排列。
LinkedList是List接口链接列表的实现,允许包含Null,并且提供了获取、删除、添加元素等统一命名的方法,所以LinkedList可以被用作“堆栈”、“队列”、“双向列表”
此类是 Java Collections Framework 的成员此类不是同步的

ArrayList和LinkedList的区别:

(1)二者都是List接口的实现,不同的是ArrayList是List接口一个有序的大小可变得数组集合,LikedList是双向链表的实现。
(2)二者都可以对存储在其中的元素进行增删改查, ArrayList存储的是一个有序的数组集合,在其开头和结尾做增删改操作效率是一样,但是对其列表中间的元素要做增删操作的话效率就会相对较慢,因为你修改的这个元素可能影响到它后面所有元素的下标值。但是ArrayList它的查询效率是比较好的,因为它是一个有序的列表集合,可以根据对应的下标来获取。 LinkedList是一个双向链表,是一个链表结构,链表结构中每一个元素都记录了对应下一个节点的指针,所以链表中元素的修改只跟它对应的前一个元素和后一个元素有关系,因此如果对LinkedList中元素做增删改操作效率就会比较好。但是要检索链表中的元素效率就会比较慢。
(3)ArrayList是一个动态数组,一般初始化的时候都会指定这个容器的空间大小,如果有空间浪费的话,也只是列表尾部预留的没有用的部分。LinkedList是一个双向链表,链表中的每一个元素都有一块自己的数据域同时还要记录下一节点的指针域,就是说每一个元素都要消耗相当的空间。所以LinkedList的内存开销要比ArrayList的大。
(4)二者都不是同步的(都不是线程安全的)

注意:
Vector和ArrayList相似都是List接口实现的动态数组,不同的是Vector是线程安全的,所以效率上要比ArrayList慢一些。
默认初始容量都是10

链表
链表由一系列结点(链表中每一个元素称为一个结点)组成,这个结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域
使用链表结构可以克服数组链表需要预选知道数据大小的缺点, 链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。
但是同时也正是因为链表增加了结点存储的下一个结点的指针域,所以内存空间开销比较大,(比较耗费内存空间)

猜你喜欢

转载自blog.csdn.net/u013806366/article/details/84631792