LinkedList是底层基于链表的一种数据结构。其中每一个节点称为一个Node,结构如下:
从Node结构中可以看出,LinkedList是一个双向链表,那对它的操作就是对双向链表的操作。
首先来分析下它的属性:
transient int size = 0; /** * Pointer to first node. * Invariant: (first == null && last == null) || * (first.prev == null && first.item != null) */ transient Node<E> first; /** * Pointer to last node. * Invariant: (first == null && last == null) || * (last.next == null && last.item != null) */ transient Node<E> last;
构造函数:
- 无参构造函数
- 传入一个集合,然后会调用addAll()方法将集合中的元素加入链表
addAll(c):
底层调用的是addAll(size,c),它表示的是将集合C插入到第size个元素的后面,这里的size从1开始,即如果输入size是0的话,表示插入到链表的最前面,如果输入size是1的话,插入到链表的第一个元素后面。
链表的第一个元素的pre指针指向null,链表的最后一个元素的next指针指向null。
linkFirst(E e):在链表头部插入元素
linkLast(E e)类似,就是在尾部插入节点。
linkBefore(E e,Node<E> succ):在succ节点之前插入一个节点,要求succ不为空
unlinkFirst(Node<E> f) :删除头结点,并返回被删除的头节点的值,提供给外部的接口是removeFirst().....这个是我按照从上到下的顺序先看到了这个方法
普通的add()是在队尾添加元素:
remove()看来只是删除遇到的第一个相同的元素...如果还有一个节点值为o,这个节点是不会被删除的:
Node(int index):返回制定下标的元素,从0开始。即如果index为0,返回头结点