zoukankan      html  css  js  c++  java
  • JDK1.8 LinkedList双向链表

    序言

    LinkedList是一个双向链表

    也就是说list中的每个元素,在存储自身值之外,还 额外存储了其前一个和后一个元素的地址,所以也就可以很方便地根据当前元素获取到其前后的元素

    链表的尾部元素的后一个节点是链表的头节点;而链表的头结点前一个节点则是则是链表的尾节点(是不是有点像贪吃蛇最后 头吃到自己尾巴的样子,脑补下)

    既然是一个双向链表,那么必然有一个基本的存储单元,让我们来看LinkedList的最基础的存储单元。

    源码

    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;
            }
        }
    linkFirst
    private void linkFirst(E e) {
            final Node<E> f = first;
            final Node<E> newNode = new Node<>(null, e, f);
            first = newNode;
            if (f == null)
                last = newNode;
            else
                f.prev = newNode;
            size++;
            modCount++;
        }

    总结

    • LinkedList内部使用链表实现,相比于ArrayList更加耗费空间。
    • LinkedList插入,删除节点不用大量copy原来元素,效率更高。
    • LinkedList查找元素使用遍历,效率一般。
    • LinkedList同时是双向队列的实现。

    资料

    List之LinkedList源码实现

    https://www.jianshu.com/p/820dd2fec5e8

  • 相关阅读:
    java 常用
    面试题目总结
    前端自动化构建工具gulp记录
    js面向对象学习笔记
    sass,compass学习笔记总结
    JS核心知识点:DOMBOMEVENT
    boost atomic
    boost thread
    boost function bind ref
    boost phoenix
  • 原文地址:https://www.cnblogs.com/cnki/p/10669681.html
Copyright © 2011-2022 走看看