LinkedList内部实现原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LinkedList内部实现原理相关的知识,希望对你有一定的参考价值。
LinkedList内部实现原理
同ArrayList内部原理一样
我们先创建一个LinkedList对象LinkedList<String> li = new LinkedList<>();
,然后查看其构造方法
transient Node<E> first;
transient Node<E> last;
public LinkedList() {
}
比较尴尬的是在它的构造方法中什么也没有写。LinkedList
的结构是**双向链表结构**,链表结构数据是存储在节点中的,我们正好看到两个Node
节点属性,一个叫first
代表链表中第一个节点,另一个叫last
代表链表中最后一个节点。
查看一下Node
类
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;
}
这是一个内部类,标准的双向链表的数据结构Node<E> prev
前驱指向该节点的前一个节点,Node<E> next;
后继指向该节点的后一个节点,E item;
元素用于存放数据。
当我们执行add()
方法向LinkedList
中添加数据的时候,调用以下方法
public boolean add(E e) {
linkLast(e);
return true;
}
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}
我们发现它将last
(最后一个节点)给了l
节点,然后new
了一个新的节点初始化新节点的前驱为l
节点,后继为null
,元素为我们要存放的对象。然后设置newNode
为last
节点,如果节点l
为null
则设置newNode
为first
节点,否则使l
的next
指向新的节点 l.next = newNode
。
以上是关于LinkedList内部实现原理的主要内容,如果未能解决你的问题,请参考以下文章