美文网首页
关于LinkedList

关于LinkedList

作者: 瓢鳍小虾虎 | 来源:发表于2021-08-03 12:43 被阅读0次

    LinkedList实现了List接口与Deque接口。Deque解开意思是“Double End Queue”(双端队列),这个队列定义了2端可以插入或者删除元素,可以实现为无容量限制的队列,也可以实现为有容量限制的队列,LinkedList采用的有容量限制的实现,最大容量为Integer.MAX_VALUE。

    public class LinkedList<E>
        extends AbstractSequentialList<E>
        implements List<E>, Deque<E>, Cloneable, java.io.Serializable
    {
        //长度
        transient int size = 0;
        //指向头结点
        transient Node<E> first;
        //指向尾结点
        transient Node<E> last;
    
      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;
        }
      }
    }
    
    

    Node是一个静态内部类。Node代表链表基本数据元素,封装了数据本身和两端指针。

    有限容量的链表实现Node定位有段代码比通常的思路好一些,通过判断index靠近头还是尾,再遍历:

    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;
        }
    }
    

    比较LinkedList和ArrayList
    相同点:

    1. 接口实现:都实现了List接口,都是线性列表的实现
    2. 线程安全:都是线程不安全的

    不同点:

    1. 底层实现,ArrayList是数组,而LinkedList是双向链表
    2. 接口实现,ArrayList实现了RandomAccess支持随机节点快速访问,LinkedList实现了Deque,可以作为队列使用。
    3. 性能:新增、删除元素时ArrayList需要使用到拷贝原数组,而LinkedList只需移动指针;查找元素 ArrayList支持随机元素访问,而LinkedList只能一个节点的去遍历。简要来说,ArrayList适合查找,LinkedList适合增删。(如果ArrayList增删只考虑从末尾操作,那么就无需移动数组,速度反而会异常的快。)

    参考文章:
    Java容器之LinkedList

    相关文章

      网友评论

          本文标题:关于LinkedList

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