安诺爱思考

talk is cheap,show me the code.!!!要重实践。找准定位和方向,不急不躁,持续投入。顺势而为。...

JAVA集合源码分析系列:LinkedList源码分析

LinkedList源码分析

一.LinkedList简介

LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
LinkedList 实现 List 接口,能对它进行队列操作。
LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
LinkedList 是非同步的。

二.LinkedList源码分析

LinkedList的本质是双向链表。
(01) LinkedList继承于AbstractSequentialList,并且实现了Dequeue接口。
(02) LinkedList包含两个重要的成员:header 和 size。
header是双向链表的表头,它是双向链表节点所对应的类Entry的实例。Entry中包含成员变量: previous, next, element。其中,previous是该节点的上一个节点,next是该节点的下一个节点,element是该节点所包含的值。
size是双向链表中节点的个数。
  
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。注意LinkedList的内部不是循环的。

1.Node

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

这是一个节点对应的类,其中可看到有一个元素、该节点的前驱、该节点的后继三个成员。

2.add方法


 public boolean add(E e) {
        linkLast(e);
        return true;
    }

add方法其实是在链表的最后又添加了一个元素。我们可以看一下linkLast的源码:

 /**
     * Links e as last element.
     */
    void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }

大致意思就是在链表的尾部再增加一个元素。

三.总结

大学的时候学习的《数据结构》又派上用场了,通过上面的分析,我们知道LinkedList的内部实现是双向链表,优点是:增加删除方便,但是取值比较慢,正好和ArrayList相反。请选择合适的尝试使用合适的数据结构。

参考资料

Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
http://www.cnblogs.com/skywang12345/p/3308807.html

阅读更多

扫码向博主提问

去开通我的Chat快问

a910626

博客专家

非学,无以致疑;非问,无以广识
版权声明:不积跬步无以至千里 https://blog.csdn.net/a910626/article/details/52357074
个人分类: java提高
上一篇JAVA集合源码分析系列:ArrayList源码分析
下一篇JAVA集合源码分析系列:HashMap源码分析
想对作者说点什么? 我来说一句

集合框架源码分析

2011年09月25日 318KB 下载

没有更多推荐了,返回首页

关闭
关闭