美文网首页
LinkedList 底层分析

LinkedList 底层分析

作者: codingJanson | 来源:发表于2019-02-19 14:41 被阅读0次
image

如图所示 LinkedList 底层是基于双向链表实现的,也是实现了 List 接口,所以也拥有 List 的一些特点(JDK1.7/8 之后取消了循环,修改为双向链表)。

新增方法

    public boolean add(E e) {
        linkLast(e);
        return true;
    }
     /**
     * Links e as last element.//将节点值为e的节点作为最后一个节点
     */
    void linkLast(E e) {
        final Node<E> l = last;
 //构建一个prev值为l,next为null,节点值为e的节点
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }

可见每次插入都是移动指针,和 ArrayList 的拷贝数组来说效率要高上不少。

查询方法

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

    Node<E> node(int index) {
        // assert isElementIndex(index);

        if (index < (size >> 1)) {
            Node<E> x = first;
            for (int i = 0; i < index; i++)
                x = x.next;
            return x;
        } else {
            Node<E> x = last;
            for (int i = size - 1; i > index; i--)
                x = x.prev;
            return x;
        }
    }

上述代码,利用了双向链表的特性,如果index离链表头比较近,就从节点头部遍历。否则就从节点尾部开始遍历。使用空间(双向链表)来换取时间。

  • node()会以O(n/2)的性能去获取一个结点
    • 如果索引值大于链表大小的一半,那么将从尾结点开始遍历

这样的效率是非常低的,特别是当 index 越接近 size 的中间值时。

总结:

  • LinkedList 插入,删除都是移动指针效率很高。
  • 查找需要进行遍历查询,效率较低。

相关文章

  • LinkedList 底层分析

    LinkedList 底层分析 如图所示 LinkedList 底层是基于双向链表实现的,也是实现了 List 接...

  • LinkedList 底层分析

    LinkedList 底层分析 如图所示 LinkedList 底层是基于双向链表实现的,也是实现了 List 接...

  • LinkedList 底层分析

    LinkedList 底层是基于双向链表实现的,也是实现了 List 接口,所以也拥有 List 的一些特点(JD...

  • LinkedList 底层分析

    新增方法 可见每次插入都是移动指针,和 ArrayList 的拷贝数组来说效率要高上不少。 查询方法 上述代码,利...

  • LinkedList 底层分析

    如图所示 LinkedList 底层是基于双向链表实现的,也是实现了 List 接口,所以也拥有 List 的一些...

  • 全网最硬核的源码分析之——LinkedList源码分析

    此源码分析基于JDK1.8 一、LinkedList数据结构 1.1 数据结构 LinkedList 底层数据结构...

  • JAVA 集合之 LinkedList 底层实现和原理

    JAVA 集合之 LinkedList 底层实现和原理 概述 LinkedList底层是基于双向链表(双向链表的特...

  • LinkedList简介

    LinkedList概述 LinkedList底层通过双向集合的数据结构实现,LinkedList可以作为List...

  • 2018-08-08

    java集合类的底层实现 LinkedList底层实现和原理 LinkedList类是List接口的实现类,它是一...

  • 【面试大纲】Java集合-LinkedList

    声明:以下内容纯属个人理解,有不正确之处请积极指正! LinkedList 底层是什么? LinkedList底层...

网友评论

      本文标题:LinkedList 底层分析

      本文链接:https://www.haomeiwen.com/subject/dyebeqtx.html