add
void linkLast(E e) { //e 要添加的元素 final Node<E> l = last; // 最后一个元素 final Node<E> newNode = new Node<>(l, e, null); //创建元素新节点 last = newNode; if (l == null)// 如果最后一个节点null,说明是第一次add 元素 first = newNode; //将新的元素置第一个元素 else l.next = newNode; // 如果最后一个节点不为null,就把新节点挂载最后一个节点的下面 size++; //集合中真实的元素个数 modCount++;// 操作数++ }
remove
public E remove(int index) { checkElementIndex(index); return unlink(node(index)); } // ===============================获取要删除的节点 Node<E> node(int index) {// index=2 // assert isElementIndex(index); if (index < (size >> 1)) { Node<E> x = first; //遍历index 找到要删除的node for (int i = 0; i < index; i++) x = x.next; return x; } else { Node<E> x = last; for (int i = size - 1; i > index; i--) x = x.prev; return x; } } // =================================删除元素 E unlink(Node<E> x) {// x 要删除的节点 // assert x != null; final E element = x.item; // 获取要删除node的item final Node<E> next = x.next//获取要删除node.next final Node<E> prev = x.prev;////获取要删除node.prev // 处理delNode 的prev 节点 if (prev == null) { // 如果没有上一个元素,就说明delNode是头节点,将delNode的next 节点置为first first = next; } else { prev.next = next; // 如果delNode有上一个节点,就将上一个节点的next 置为delNode的next。简单说就是delNode.next 替换 delNode的位置 x.prev = null; // 将delNode 的prev 置为null } // 处理delNode 的next节点 if (next == null) {// 说明delNode 是最后一个node last = prev; // 那么delNode 的prev 就是最后一个node } else { next.prev = prev; // 将prev 节点 关联到next.prev节点 x.next = null; // 将delNode 的next置为null } x.item = null;// 将delNode 的item置为null size--; // 数组容量-- modCount++; // 操作数据++ return element; // 返回删除的node }