LinkedList
LinkedList 是由一组元素串联而成的序列结构
链表是以Node对象为基础定义的一种序列结构
Node 结构中定义了它的前一个和后一个元素,这样每一个元素都可以通过next和prev 查找到前一个元素和后一个元素
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;
}
}
由此构成了 一种序列关系。
LinkedList 初始化定义了 链表长度,头节点和尾节点
transient int size = 0;
/**
* Pointer to first node.
*/
transient Node<E> first;
/**
* Pointer to last node.
*/
transient Node<E> last;
构造器 有两个
空参构造器:
public LinkedList() {
}
将Collection集合元素添加成列表
public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
}
add (E e)
像链表末尾添加元素
public boolean add(E e) {
linkLast(e);
return true;
}
直接向链表末尾添加元素,对象存储的last 节点 被设置为新的node,将原有的last的next设置为新的node。判断first 是否有值,如果没有将node同样赋值给first (意味着当前链表中仅有node一个元素),
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++;
}
add (int index , E element)
向指定位置添加元素,如果位置在链表末尾,则使用linklast 如果位置非末尾,使用linkbefore
public void add(int index, E element) {
checkPositionIndex(index);
if (index == size)
linkLast(element);
else
linkBefore(element, node(index));
}
将当前位置的元素的前一项指向新元素,将当前位置元素前一项元素的下一项指向新元素
void linkBefore(E e, Node<E> succ) {
// assert succ != null;
final Node<E> pred = succ.prev;
final Node<E> newNode = new Node<>(pred, e, succ);
succ.prev = newNode;
if (pred == null)
first = newNode;
else
pred.next = newNode;
size++;
modCount++;
}
标签:Node,LinkedList,元素,next,newNode,prev
From: https://www.cnblogs.com/cod-fish/p/17290269.html