美文网首页
LinkedList 查询效率较慢的原因

LinkedList 查询效率较慢的原因

作者: luke_ | 来源:发表于2018-09-25 13:50 被阅读0次
  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;
        }
    }

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

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

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

小结:
LinkedList 插入,删除都是移动指针效率很高。(add方法较简单,此处并未给出)
查找需要进行遍历查询,效率较低。

相关文章

  • LinkedList 查询效率较慢的原因

    当get的时候,上述代码中,利用了双向链表的特性,如果index离链表头比较近,就从节点头部遍历。否则就从节点尾部...

  • 11.List的子类概述和LinkedList的特有功能

    LinkedList特有功能 LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢...

  • 集合之LinkedList源码分析

    LinkedList是基于双向链表实现的,相比与内部使用数组的ArrayList而言LinkedList查询比较慢...

  • Java Collections 集合类

    List ArrayList 随机存取效率高(get & set) 插入和删除较慢(除末尾) LinkedList...

  • LinkedList

    特点: 1、 LinkedList以链表的形式存储数据、对增删元素有很高的效率、查询效率较低、尤其是随机访问、效率...

  • LinkedList

    1、查询操作 可以看出LinkedList底层是链表操作,查询的时候采用二分查找法,通过for循环拿到值。效率低。...

  • Java-- LinkedList特点和底层实现

      LinkedList底层用双向链表实现的存储。特点:查询效率低,增删效率高,线程不安全。  双向链表也叫双链表...

  • 集合Collection之LinkedList

    LinkedList 底层数据结构是双向链表,查询慢,增删快。线程不安全,效率高。

  • 六张图详解LinkedList 源码解析

    LinkedList 底层基于链表实现,增删不需要移动数据,所以效率很高。但是查询和修改数据的效率低,不能像数组那...

  • 自定义实现LinkedList

    LinkedList底层用双向链表实现的存储。特点:查询效率低,增删效率高。 双向链表也叫双链表,是链表的一种,它...

网友评论

      本文标题:LinkedList 查询效率较慢的原因

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