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
}

最新文章

  1. UWP开发随笔——UWP新控件!AutoSuggestBox!
  2. tomcat错误:@HandlesTypes annotation of one or more ServletContentInitializers
  3. RIDE常用快捷键
  4. nginx+keepalived实现nginx双主高可用的负载均衡
  5. poj 2479 dp求分段最大和
  6. python学习笔记:python数字
  7. 【Unity3D】【NGUI】UICamera
  8. Cms 总结(转)
  9. J1002.JavaFX简介
  10. README.md用法
  11. bzoj 2339: [HNOI2011]卡农
  12. Java复制、移动和删除文件
  13. Ping 笔记
  14. ASP.NET Core如何使用WSFederation身份认证集成ADFS
  15. tornado的异步效果
  16. Sql Server数据库之约束
  17. Python3 WebDriver操作cookie的方法
  18. ionic日历插件
  19. iOS 一个开发者账号 多台Mac 共用
  20. 如何使用沙箱测试单笔转账到支付宝账号(php版) https://openclub.alipay.com/read.php?tid=1770&amp;fid=28

热门文章

  1. Wannafly挑战赛10 D 小H的询问(线段树)
  2. Python的程序结构[1] -&gt; 方法/Method[2] -&gt; 魔术方法 __init__ / __del__ / __new__
  3. 几何【P2313】 [HNOI2005]汤姆的游戏
  4. SOAP、SOCKET协议
  5. Guess Number Higher or Lower II -- LeetCode
  6. 【bzoj1076】【SCOI2008】【奖励关】期望最优值dp
  7. c#ppt练习
  8. Windows 8.1中WinRT的变化(一)——新增控件
  9. 【POI】导出excel文件,不生成中间文件,直接将内存中的数据创建对象下载到浏览器
  10. 网易云音乐PC客户端加密API逆向解析