LinkedList源码阅读

来源:互联网 发布:php flash播放mp4 编辑:程序博客网 时间:2024/06/11 23:33

ArrayList就是个数组
同样LinkedList的底层也是基于一种数据结构的,这个结构是双向循环链表,在简书上看到一篇文章分析很详细,基于jdk1.6,链接如下:
LinkedList源码解析
但是在jdk1.7中,LinkedList是一种双向链表,非循环,但是增加了指向了最后一个节点和指向第一个节点的指针。
1 LinkedList成员变量和构造函数

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;    /**     * 构造方法,默认情况下,类的成员变量引用类型都初始化为null,     */    public LinkedList() {    }   }

2 add方法

  public boolean add(E e) {        linkLast(e);        return true;    }  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++;    }    //用到的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;        }    }

考虑这种情况,那么链表是怎么工作的?

List list = new LinkedList<String>();list.add("nihao");

先初始化一个空list,first,last都是null,size是0
调用add方法后链表的结构
通过add方法后的链表结构

至于这种改变的好处在后面看源码再补充吧

0 0
原创粉丝点击