JDK源码阅读——LinkedList
来源:互联网 发布:淘宝鬼脚七微信号 编辑:程序博客网 时间:2024/06/05 02:53
序
作为数据结构中最基础的两种结构,数组与链表,在JAVA中都有对应的实现——ArrayList与LinkedList。本文主要分析一下LinkedList中的比较重要的源码。
LinkedList是实现了List与Deque的双向链表。他不是线程安全的,在多线程情况下需要用户手动保证线程安全性。系统推荐使用下面的方法来保证线程安全。
List list = Collections.synchronizedList(new LinkedList(...));
Field
transient int size = 0; //头结点 transient Node<E> first; //尾节点transient Node<E> last;//节点本身是一个内部类private static class Node<E> { //节点内容本身 E item; //下一个节点 Node<E> next; //上一个节点 Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
构造器
//构造一个普通的新链表对象 public LinkedList() { } //构造一个新链表,并将入参集合append到新链表中 public LinkedList(Collection<? extends E> c) { this(); addAll(c); }//append的核心代码在这里public boolean addAll(int index, Collection<? extends E> c) { checkPositionIndex(index); Object[] a = c.toArray(); //需要新增的结点个数 int numNew = a.length; if (numNew == 0) return false; //声明头结点与尾节点 Node<E> pred, succ; //从尾部开始appedn if (index == size) { succ = null; pred = last; } else { //从中间开始append,如图1 succ = node(index); pred = succ.prev; }
for (Object o : a) { @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; }
上述循环的作用就是链表的插入操作,如图2。不停的移动pred,把输入的集合全都append到链表尾部。
if (succ == null) { last = pred; } else { pred.next = succ; succ.prev = pred; } size += numNew; modCount++; return true; }
1 0
- JDK源码阅读——ArrayList\LinkedList
- JDK源码阅读——LinkedList
- JDK源码阅读之LinkedList
- jdk源码阅读--(LinkedList)
- jdk源码阅读二:LinkedList
- 【JDK源码阅读4-util】Collection-List---LinkedList
- JDK源码-LinkedList源码
- JDK源码阅读——Collection
- JDK源码阅读——ArrayList(1)
- JDK源码阅读——ArrayList(2)
- JDK源码阅读——ArrayList
- JDK源码阅读——模拟HashMap
- jdk源码阅读——ArrayList
- LinkedList源码阅读
- java8 LinkedList源码阅读
- java8 LinkedList源码阅读
- LinkedList源码阅读
- LinkedList源码阅读笔记
- spring事务管理机制
- html 盒子模型基础(文档流,浮动,页面布局)(五)
- Spring基础知识汇总
- 设置session失效的几种方法
- 微信支付
- JDK源码阅读——LinkedList
- thinkphp核心源码注释|Log.class.php
- app上架后搜不到解决办法
- mysql order by 中文排序 错乱问题
- 响应式开发(六)-----Bootstrap CSS----------Bootstrap文本排版
- 10,词根 - 弯、折、扭
- Spring实践(一)IOC的原理和实现机制
- 机器学习系列(5)_从白富美相亲看特征预处理与选择(上)
- Golang Rsa 加密 解密