(注意:本文源码基于JDK1.8)
创建LinkedList对象,从构造方法开始,接下来分析构造方法
无参数的构造方法分析
public LinkedList() {
}
创建LinkedList对象,方法体中什么也没有做。注意:隐式的执行了super()调用基类的构造方法!
传入一个参数的构造方法分析
public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
}
传入参数为Collection对象,持有了多个元素,表示创建LinkedList对象后,同时添加多个元素
1、调用无参数的构造方法
首先调用无参的构造方法,目的是为了显式调用父类的构造方法,另外也可以初始化持有的其他实例变量
2、调用addAll()方法,并将传入的Collection对象c传入进去,addAll()方法会添加多个元素进去
重要字段介绍
1、继承父类的实例变量modCount
用于fail-fast机制检测
2、三个实例变量+一个常量
transient int size = 0;
transient Node<E> first;
transient Node<E> last;
private static final long serialVersionUID = 876323262645176354L;
size:表示LinkedList对象持有的元素总数,该实例变量使用transient修饰,不参与对象的序列化
first:表示LinkedList对象持有的第一个结点对象,不参与对象序列化
last:表示LinkedList对象持有的最后一个结点对象,不参与对象序列化
serialVersionUID:一个常量值,反序列化对象时,JVM使用该UID值,与加载类库中的UID作一个对比,两个值一致才会进行反序列化对象,否则抛出一个异常,类版本不一样
总结
1、LinkedList基于一个双向链表,LinkedList对象持有双向链表头结点对象的引用,实例变量first指向此Node对象
2、LinkedList对象持有表示双向链表尾结点对象的引用,实例变量last指向此Node对象
3、LinkedList的父类为AbstractList,与ArrayList是同一个父类,实例变量modCount定义在AbstractList类中