java集合之LinkedList

2021-07-08 11:05

阅读:427

标签:操作   rev   cts   nal   克隆   使用   code   link   函数   

1.LinkedList是什么?有什么特点

  LinkedList是一种可以在任何位置进行高效地插入和移除操作的有序序列,它是基于双向链表实现的。

LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
LinkedList 实现 List 接口,能对它进行队列操作。
LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
LinkedList 是非同步的。

 

2.LinkedList源码分析

2.1 节点的基本结构

private static class Node {
        E item;   //表示该节点包含的值
        Node next; //表达当前节点的下一个节点
        Node prev; //表示当前节点的上一个节点

        Node(Node prev, E element, Node next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

2.2增加操作

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

 void linkLast(E e) {
        final Node l = last;
        final Node newNode = new Node(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }

插入指定位置

public void add(int index, E element) {
       //检查是否越界
        checkPositionIndex(index);
        //最后一位调用add
        if (index == size)
            linkLast(element);
    //中间位置调用linkBefore
        else
            linkBefore(element, node(index));
    }

void linkBefore(E e, Node succ) {
        // assert succ != null;
        final Node pred = succ.prev;
        final Node newNode = new Node(pred, e, succ);
        succ.prev = newNode;
        if (pred == null)
            first = newNode;
        else
            pred.next = newNode;
        size++;
        modCount++;
    }
     

 

java集合之LinkedList

标签:操作   rev   cts   nal   克隆   使用   code   link   函数   

原文地址:https://www.cnblogs.com/qtxx/p/9583102.html


评论


亲,登录后才可以留言!