LinkedList源码详解

  • likedList简介
    • LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。
    • 非线程安全的,只在单线程下适合使用。
    • 实现了Serializable接口,因此它支持序列化,能够通过序列化传输
    • 实现了Cloneable接口,能被克隆
  • 源码

    • add()
      • linkLast
      • linkFirst
    • remove()
    • node()

      Node<E> node(int 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;
          }
      }
      
    • 类似于二分查找
  • 小结

    • LinkedList没有大小限制
    • 没有浪费存储空间(Node节点的创建需要额外消耗少量空间)
    • add,remove等操作的空间消耗是固定的,不会造成对元素进行额外的移动拷贝
    • 除了对首尾元素外,对其他节点,进行add,remove,set,get等操作,都需要进行遍历查找的,时间复杂度为O(n)
    • 适用于查询操作少,存储大量数据,可以考虑使用LinkedList

猜你喜欢

转载自blog.csdn.net/sinat_32197439/article/details/78068861