Skip to content
章节导航

LinkedList 源码及数据存储结构

存储结构

LinkedList 它是用双向列表的一个形式进行数据存储的,在 LinkedList 里面它最基本的单位叫做 Node,就是节点每个 Node 他本身是一个 class,它是这个 LinkedList 里面的一个内部类,如下:

shell
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;
        }
    }

它这里面它包含的节点的元素,这个 nextprove,是分别指向下一个节点跟上一个节点的一个 Node 对象,通过这三个可以形成一个双向列表,而且 LinkedList 它是实现了 Deque 接口,可以利用 addFirst 和 addLast 来记录列表的起始节点。

常用方法

1、add()

add() 方法将节点添加到列表末尾,它最终调用的是这个 linkLast() 这个方法

shell
public boolean add(E e) {
        linkLast(e);
        return true;
    }

2、get()

get 方法根据索引获取元素,先判断索引有效性,get 方法会根据索引位置选择从头或尾开始遍历查找

shell
public E get(int index) {
        checkElementIndex(index);
        return node(index).item;
    }

它会先通过 CheckElementIndex 方法来判断它是否大于等于元素的个数,就是要检查的一个方法,它最终是调的这个 Node 这个方法。 它会首先来判断所有 Index 的它的位置,它到底是靠近尾节点,还是靠近这个头节点,最终它会决定是往前辨率还是往后辨率。

3、Remove()

Remove方法删除指定索引的节点,调用 unlink 方法来调整这个 Node 节点前后的一个节点的指向

shell
public E remove(int index) {
        checkElementIndex(index);
        return unlink(node(index));
    }