addAll 方法
public boolean addAll(Collection<? extends E> c) {
return addAll(size, c);
}
public boolean addAll(int index, Collection<? extends E> c) {
checkPositionIndex(index); //
检查是否越界
Object[] a = c.toArray(); //
将集合转为数组
int numNew = a.length; //
获取到集合的大小
if (numNew == 0) //
长度为空返回
false
return false;
Node<E> pred, succ; // pred
:中间变量,
succ
:插入位置的后一个元素
if (index == size) { //
如果插入位置为尾元素的下一个位置
succ = null; //
插入位置后面没有元素了
pred = last; //
新插入集合的前一个元素为原来的尾元素
} else { //
如果不是在尾部的下一个元素插入
succ = node(index); //
通过
node()
方法获取到
index
位置的元素
pred = succ.prev; //
插入集合的首元素的前指向为
index
位置的前一个元素
}
for (Object o : a) { //
循环遍历,使新插入集合元素的排列起来,并使
pred
指向
新插入集合的最后一个元素
@SuppressWarnings("unchecked") E e = (E) o;
Node<E> newNode = new Node<>(pred, e, null);
if (pred == null)
first = newNode;
else
pred.next = newNode;
pred = newNode;
}
if (succ == null) { //
如果插入位置后一个元素为空,说明是尾部
last = pred; //
则尾元素置为插入集合的尾元素
} else {