简介
LinkedList是一个无限扩容的链式存储的线性表,用任意的存储单元来存放线性表中的各个数据元素,它实现基于双向链表。链式存储结构,数据元素之间物理内存可以连续也可以不连续,元素与元素之间通过指针建立连接(指针指向上一个或者下一个元素),这样更高效的利用内存。
LinkedList结构
元素节点,元素节点3个数据域,指针和数据类型
代码如下:
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
链表结构
实现原理
成员变量
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
//transient 表示不能被序列化
//链表长度
transient int size = 0;
//头节点
/**
* Pointer to first node.
* Invariant: (first == null && last == null) ||
* (first.prev == null && first.item != null)
*/
transient Node<E> first;
//尾节点
/**
* Pointer to last node.
* Invariant: (first == null && last == null) ||
* (last.next == null && last.item != null)
*/
transient Node<E> last;
/**
* Constructs an empty list.
*/
public LinkedList() {
}
....
}
添加元素:
默认添加元素为尾部添加,时间复杂度O(1)
/**
* 添加元素,添加到链表尾部
*/
public boolean add(E e) {
linkLast(e);
return true;
}
void linkLast(E e) {