LinkedList源码解析
来源:互联网 发布:数据分析研究生专业 编辑:程序博客网 时间:2024/06/01 18:09
借鉴博客:http://blog.csdn.net/zw0283/article/details/51132161
正如上面这篇博客所述,在1.6包括1.6之前,LinkedList都是一个环形链表结构,直到1.7包括1.7之后LinkedList变成了一个线性链表结构了。
如果大家不是很懂链表的结构,可以去翻看上面的这篇博客
一.LinkedList的定义
LinkedList和ArrayList同样提供了List和Serializable接口,其中AbstractSequentialList也是提供了List接口,这里再次声明出来只是为了更加清晰。
Deque接口定义了双端队列的操作
二.LinkedList的全局变量
transient int size = 0;//当前链表有多少节点
transient Node<E> first;//指向链表第一个节点的引用
transient Node<E> last;//指向链表最后一个节点的引用
三.LinkedList的构造方法
1.无参构造
public LinkedList() { }
2.有参构造
public LinkedList(Collection<? extends E> c) {//调用第一个构造方法构造一个空的链表,之后通过addAll将c中的元素全部添加到链表中,下面我们先来看看addAll方法吧 this(); addAll(c); }
四.LinkedList的普通方法
1.addAll(Collection
public boolean addAll(Collection<? extends E> c) { return addAll(size, c);//调用addAll(size,c) }
2.addAll(int index, Collection
public boolean addAll(int index, Collection<? extends E> c) { checkPositionIndex(index);//翻看方法发现就是判断index插入位置是否超过链表的长度或者小于0,如果是就抛出IndexOutOfBoundsException异常 Object[] a = c.toArray();//把c转换成Object数组 int numNew = a.length; if (numNew == 0)//数组为空直接返回false return false; //下面都是数组不为空的情况了 为了看明白这个可以先看看下面的Node类 Node<E> pred, succ; if (index == size) { succ = null; pred = last; } else { 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; } if (succ == null) { last = pred; } else { pred.next = succ; succ.prev = pred; } size += numNew; modCount++; return true; }
private static class Node<E> {//Node是LinkedList的内部私有类 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; } }
这段代码其实还是比较好理解的,分两种情况,一种是原来的链表为空,一种是原来的链表为值
这里就看看后者吧
2 0
- linkedList 源码解析
- LinkedList源码解析
- LinkedList源码解析
- LinkedList源码解析
- LinkedList源码解析
- LinkedList源码解析
- ArrayList LinkedList源码解析
- LinkedList源码解析
- LinkedList源码解析
- LinkedList源码解析
- LinkedList集合源码解析
- LinkedList源码解析
- LinkedList源码解析
- LinkedList源码解析
- LinkedList源码解析
- LinkedList源码解析
- 从源码解析LinkedList
- LinkedList源码解析
- Redis集群方案介绍
- 关于#ifdef的一个注意事项
- scanf sprintf用法
- iOS平台上aa(见缝插针)游戏的简易实现
- STL完整版整理
- LinkedList源码解析
- 实现背景图片自适应。
- 输出一行数字,中间用空格隔开,最后一个数字没有空格
- Activity的四种启动模式
- 贪心算法--喷水装置(二)
- 闲话mysql-5.7.18-winx64的secure_file_priv配置项
- chrome on mac
- 水乳交融:论VMware与OpenStack的整合—1
- yii定义常量