LinkedList源码详解

来源:互联网 发布:西安行知中学初中部 编辑:程序博客网 时间:2024/06/06 05:18
  • 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
原创粉丝点击