一、初步认识
LinkedList也是List接口的实现类,与ArrayList不同之处是采用的存储结构不同,ArrayList的数据结构为线性表,而LinkedList数据结构是链表。链表数据结构的特点是每个元素分配的空间不必连续、插入和删除元素时速度非常快、但访问元素的速度较慢。
LinkedList是一个双向链表, 当数据量很大或者操作很频繁的情况下,添加和删除元素时具有比ArrayList更好的性能。但在元素的查询和修改方面要弱于ArrayList。LinkedList类每个结点用内部类Node表示,LinkedList通过first和last引用分别指向链表的第一个和最后一个元素,当链表为空时,first和last都为NULL值。
二、继承关系
1 public class LinkedList<E> 2 extends AbstractSequentialList<E> 3 implements List<E>, Deque<E>, Cloneable, java.io.Serializable
LinkedList
是一个继承于AbstractSequentialList
的双向链表。它也可以被当做堆栈、队列或双端队列进行使用。LinkedList
实现List
接口,能让它进行队列操作。LinkedList
实现Deque
接口,即能将LinkedList
当做双端队列使用。LinkedList
实现Cloneable
,即覆盖了函数clone()
,能被克隆。LinkedList
实现了java.io.Serializable
接口,这意味着LinkedList
支持序列化,能通过序列化去传输。LinkedList
中的操作不是线程安全的。
二、存储结构图
每个节点都应该有3部分内容:
class Node { Node previous; //前一个节点 Object element; //本节点保存的数据 Node next; //后一个节点 }