31. Java LinkedList
链表是常见的数据结构,是一种线性表,但是并不会按照线性的顺序存储数据,而是在每个节点中存储到下一个节点的地址。链表可以分为单向链表和双向链表。
一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。

一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。

Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。
与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。
使用ArrayList的情况:
- 频繁访问列表中的某个元素
- 只需要在列表的末尾进行添加和删除元素的操作
使用LinkedList的情况:
- 需要循环迭代来访问列表中的某些元素
- 需要频繁的进行添加和删除元素的操作

LinkedList继承了 AbstractSequentialList 类。
LinkedList实现了Queue接口,可以作为队列使用。
LinkedList实现了List接口,可以进行列表的相关操作。
LinkedList实现了Deque接口,可以作为队列使用。
LinkedList实现了Cloneable接口,可以实现克隆。
LinkedList实现了java.io.Serializable接口,可支持序列化,能够通过序列化传输。
LinkedList类位于java.util包下,使用前需要引入它
import java.util.LinkedList;
//普通创建
LinkedList<E> list = new LinkedList<E>();
//使用集合创建链表
LinkedList<E> list = new LinkedList(Collection<? extends E> c);
LinkedList的开头和结尾添加元素
使用addFisrt和addLast可以在列表的开头和末尾添加元素
同理,使用removeFirst和removeLast可以删除列表开头和末尾的元素
常用方法
| 方法 | 描述 |
|---|---|
| public boolean add(E e) | 链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
| public void add(int index, E element) | 向指定位置插入元素。 |
| public boolean addAll(Collection c) | 将一个集合的所有元素添加到链表后面,返回是否成功,成功为 true,失败为 false。 |
| public boolean addAll(int index, Collection c) | 将一个集合的所有元素添加到链表的指定位置后面,返回是否成功,成功为 true,失败为 false。 |
| public void addFirst(E e) | 元素添加到头部。 |
| public void addLast(E e) | 元素添加到尾部。 |
| public boolean offer(E e) | 向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
| public boolean offerFirst(E e) | 头部插入元素,返回是否成功,成功为 true,失败为 false。 |
| public boolean offerLast(E e) | 尾部插入元素,返回是否成功,成功为 true,失败为 false。 |
| public void clear() | 清空链表。 |
| public E removeFirst() | 删除并返回第一个元素。 |
| public E removeLast() | 删除并返回最后一个元素。 |
| public boolean remove(Object o) | 删除某一元素,返回是否成功,成功为 true,失败为 false。 |
| public E remove(int index) | 删除指定位置的元素。 |
| public E poll() | 删除并返回第一个元素。 |
| public E remove() | 删除并返回第一个元素。 |
| public boolean contains(Object o) | 判断是否含有某一元素。 |
| public E get(int index) | 返回指定位置的元素。 |
| public E getFirst() | 返回第一个元素。 |
| public E getLast() | 返回最后一个元素。 |
| public int indexOf(Object o) | 查找指定元素从前往后第一次出现的索引。 |
| public int lastIndexOf(Object o) | 查找指定元素最后一次出现的索引。 |
| public E peek() | 返回第一个元素。 |
| public E element() | 返回第一个元素。 |
| public E peekFirst() | 返回头部元素。 |
| public E peekLast() | 返回尾部元素。 |
| public E set(int index, E element) | 设置指定位置的元素。 |
| public Object clone() | 克隆该列表。 |
| public Iterator descendingIterator() | 返回倒序迭代器。 |
| public int size() | 返回链表元素个数。 |
| public ListIterator listIterator(int index) | 返回从指定位置开始到末尾的迭代器。 |
| public Object[] toArray() | 返回一个由链表元素组成的数组。 |
| public T[] toArray(T[] a) | 返回一个由链表元素转换类型而成的数组。 |