关于java:LinkedList剖析

9次阅读

共计 852 个字符,预计需要花费 3 分钟才能阅读完成。

LinkedList 是 List 家族除 ArrayList 之外最为罕用的另一成员,明天一文彻底搞懂 LinkedList。

底层数据结构

LinkedList 底层是一个双向链表:

transient Node<E> first;
transient Node<E> last;

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 对象的 item 中,并保留指向上一节点、下一节点的对象。

再为整个 LinkedList 定义首节点 first,尾结点 last,不便对 LinkedList 的正向或逆向拜访。

LinkedList 的容量

不应用数组存储数据,所以不存在容量的概念,能够有限存入。

数据存入

add(E e)/addlast(E e):追加数据到链表尾部。
addfirst(E e): 追加数据到链表头部。
push(E e):压栈,等同于 addfirst。
add(int index, E element):追加数据到链表指定地位。
addAll(Collection<? extends E> c):追加汇合 c 中的所有数据到链表尾部。
addAll(int index,Collection<? extends E> c):追加汇合 c 中的所有数据到链表指定地位。

获取数据

contains(Object o):判断链表是否蕴含指标对象。
peek():获取链表第一个对象,并且不从链表中一处对象(不出栈)。
get(int index): 获取指定地位对象。
pop():获取链表第一个数据并出栈。
removeFirst(): 等同于 pop。

因为 LinkedList 是双向链表构造,实现了 Deque 接口,提供了一系列十分不便的队列操作方法,所以,如果有相似比方先进先出、先进后出等队列操作需要的场景,LinkedList 是首选。

正文完
 0