众所周知,LinkedList的底层是使用链表来存储实际的数据的,本文来探讨LinkedList的底层源码
LinkedList中的Node类
ini
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;
}
}
以上是存储数据的核心节点,非常普通的双向链表节点
LinkedList中的核心数据
ini
transient int size = 0;
transient Node<E> first;
transient Node<E> last;
由上面的代码可知,LinkedList是一个具有头节点和尾节点的链表。
而且这些数据在Java默认的序列化中都不参与。
LinkedList初始化
空参构造
csharp
public LinkedList() {
}
在LinkedList空参构造什么也没做。
通过集合构造
scss
public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
}
先调用空参构造,再调用addAll()添加数据。
增删改查
LinkedList不像ArrayList具有扩容机制,因此增删改查就是普通的链表增删改查。