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
}

LinkedList add remove get 代码分析的更多相关文章

  1. VSM(Virtual Storage Manager) add new osd 代码分析

    vsm add new osd 流程 后台获取可用设备 | 选择可用设备及osd相关信息等 | 点击add按钮,把准备部署的osd信息添加到需要部署的item列表中 | 点击submit按钮,添加it ...

  2. HashSet——add remove contains方法底层代码分析(hashCode equals 方法的重写)

    引言:我们都知道HashSet这个类有add   remove   contains方法,但是我们要深刻理解到底是怎么判断它是否重复加入了,什么时候才移除,什么时候才算是包括????????? add ...

  3. LinkedList详解-源码分析

    LinkedList详解-源码分析 LinkedList是List接口的第二个具体的实现类,第一个是ArrayList,前面一篇文章已经总结过了,下面我们来结合源码,学习LinkedList. 基于双 ...

  4. [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(4)

    这个系列已经写了6篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Auto ...

  5. lighttpd与fastcgi+cgilua原理、代码分析与安装

    原理 http://www.cnblogs.com/skynet/p/4173450.html 快速通用网关接口(Fast Common Gateway Interface/FastCGI)是通用网关 ...

  6. LinkedList的实现源码分析

    LinkedList 以双向链表实现.链表无容量限制,但双向链表本身使用了更多空间,也需要额外的链表指针操作. 按下标访问元素--get(i)/set(i,e) 要悲剧的遍历链表将指针移动到位(如果i ...

  7. Java日常总结之LinkedList、ArrayList的效率分析

    前言: 在我们平常开发中难免会用到List集合来存储数据,一般都会选择ArrayList和LinkedList,以前只是大致知道ArrayList查询效率高LinkedList插入删除效率高,今天来实 ...

  8. java基础解析系列(十)---ArrayList和LinkedList源码及使用分析

    java基础解析系列(十)---ArrayList和LinkedList源码及使用分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder jav ...

  9. Hive metastore整体代码分析及详解

    从上一篇对Hive metastore表结构的简要分析中,我再根据数据设计的实体对象,再进行整个代码结构的总结.那么我们先打开metadata的目录,其目录结构: 可以看到,整个hivemeta的目录 ...

随机推荐

  1. HDU 1846 Brave Game【巴什博弈裸题】

    Brave Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  2. Python的并发并行[3] -> 进程[0] -> subprocess 模块

    subprocess 模块 0 模块描述 / Module Description From subprocess module: """Subprocesses wit ...

  3. 分层图【p4568】 [JLOI2011]飞行路线

    Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在nn个城市设有业务,设这些城市分别标记为\(0\)到\(n−1\),一共有\(m\)种航线 ...

  4. HDU 1496 Equations(哈希表)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=1496 [题目大意] 给出一个方程ax1^2+bx2^2+cx3^2+dx4^2=0,求-100到1 ...

  5. 可持久化线段树(主席树)(图文并茂详解)【poj2104】【区间第k大】

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=63740442 向大(hei)佬(e)实力学(di ...

  6. Visio整体移动

    同理选中第一列的两个,按向右箭头,整体友谊.

  7. 使用Chrome DevTools直接调试Node.js与JavaScript(并行)

    Good News: 现在我们可以用浏览器调试node.js了!!! 前提 Node.js 6.3+, 这个可上Node.js官网自行下载: Chrome 55+. 如果您本地的chrome升级到最新 ...

  8. lodop 控件实现web打印功能

    WEB套打可选方案不多,理想的更少,利用免费控件Lodop+JavaScript实现精确套打,算是较为经典的选择.这种方案其实比较简单,利用一个htm文件就可以实现模板设计过程,几乎是“空手套”式的开 ...

  9. html 打印代码,支持翻页

    ylbtech_html_print html打印代码,支持翻页 <html> <head> <meta name=vs_targetSchema content=&qu ...

  10. SuperMap iClient如何使用WMTS地图服务(转)

    http://blog.sina.com.cn/s/blog_6259ebd50102v221.html 什么是WMTS服务 WMTS,切片地图Web服务(Web Map Tile Service)当 ...