publicbooleanadd(E e){linkLast(e);//调用linkLast()方法returntrue;//永远返回true}voidlinkLast(E e){final Node<E> l = last;//一个临时变量,存储最后一个节点final Node<E> newNode =newNode<>(l, e, null);//创建一个Node对象
last = newNode;//将新Node对象存储到lastif(l == null)//如果没有最后一个元素,说明当前是第一个节点
first = newNode;//将新节点存为第一个节点else
l.next = newNode;//否则不是第一个节点,就赋值到当前的last的next成员
size++;//总数量 + 1
modCount++;//}
3. get() 方法
public E get(int index){checkElementIndex(index);//检查索引的合法性(必须在0-size之间),如果不合法,此方法抛出异常returnnode(index).item;}
Node<E>node(int index){//此方法接收一个索引,返回一个Node// assert isElementIndex(index);if(index <(size >>1)){//判断要查找的index是否小于size / 2,二分法查找
Node<E> x = first;// x = 第一个节点——从前往后找for(int i =0; i < index; i++)//从0开始,条件:i < index,此循环只控制次数
x = x.next;//每次 x = 当前节点.next;return x;//循环完毕,x就是index索引的节点。}else{
Node<E> x = last;// x = 最后一个节点——从后往前找for(int i = size -1; i > index; i--)//从最后位置开始,条件:i > index
x = x.prev;//每次 x = 当前节点.prev;return x;//循环完毕,x就是index索引的节点}}