LinkedList源码剖析
来源:互联网 发布:英文小说推荐 知乎 编辑:程序博客网 时间:2024/06/08 00:43
简介
LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。
由于是链表结构,LinkedList具有查找快,增删快的特点;
所有操作都是按照双重链接列表的需要执行的。在列表中,索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。同时,与ArrayList一样此实现不是同步的。
成员变量
在LinkedList中提供了两个基本属性size、header。 其中size表示的LinkedList的大小,header表示链表的表头,Entry为节点对象。从Entry对象的定义就可以看出 LinkedList是双向循环链表结构。并且可知链表的头结点是不存放数据的。
private transient Entry header = new Entry(null, null, null);
private transient int size = 0;
private static class Entry {
E element; //元素节点
Entry next; //下一个元素
Entry previous; //上一个元素
Entry(E element, Entry<E> next, Entry<E> previous) { this.element = element; this.next = next; this.previous = previous; }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
构造方法
LinkedList():构造一个空列表。
LinkedList(Collection
添加元素
add(E e): 将指定元素添加到此列表的结尾。
public boolean add(E e) {
addBefore(e, header);
return true;
}
//该方法调用addBefore方法,然后直接返回true
private Entry addBefore(E e, Entry entry) {
//利用Entry构造函数构建一个新节点 newEntry,
Entry newEntry = new Entry(e, entry, entry.previous);
//修改newEntry的前后节点的引用,确保其链表的引用关系是正确的
newEntry.previous.next = newEntry;
newEntry.next.previous = newEntry;
//容量+1
size++;
//修改次数+1
modCount++;
return newEntry;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
add(int index, E element):在此列表中指定的位置插入指定的元素。
addAll(Collection
/**
* 添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。
*/
public boolean addAll(Collection
- 【源码】LinkedList源码剖析
- LinkedList源码剖析
- LinkedList源码剖析
- LinkedList源码剖析
- LinkedList源码剖析
- LinkedList源码剖析
- Java LinkedList源码剖析
- LinkedList源码剖析
- LinkedList源码剖析
- 【Java集合源码剖析】LinkedList源码剖析
- 【Java集合源码剖析】LinkedList源码剖析
- 【Java集合源码剖析】LinkedList源码剖析
- 【Java集合源码剖析】LinkedList源码剖析
- 【Java集合源码剖析】LinkedList源码剖析
- 【Java集合源码剖析】LinkedList源码剖析
- 【Java集合源码剖析】LinkedList源码剖析
- 【Java集合源码剖析】LinkedList源码剖析
- 【Java集合源码剖析】LinkedList源码剖析
- 数据库操作
- Ubuntu14.04 + NVIDIA GTX1080Ti + cuda8.0 +cuDNN6.0 +python3.4 + tensorflow_gpu-1.4.0-cp34-cp34m-
- MySQL
- Python:K-近邻算法
- 多组从一到n的阶乘之和
- LinkedList源码剖析
- mysql基础&重点知识总结及在python中的应用(3)
- 从程序到算法——深搜
- C/S是什么,B/S是什么
- Nginx Essentials.pdf 英文原版 免费下载
- 基于神经网络的二分类问题
- 自定义Tag标签
- Spark spark-submit 参数
- 【Scikit-Learn 中文文档】预测延迟 / 预测吞吐量 / 技巧和窍门