List接口下arrayList 和linkedList源码分析

arrayList源码

jdk1.7下  arrayList源码

1.先创建arrayList对象,底层使用空参构造器(空参构造里初始数组长度为10)
List接口下arrayList 和linkedList源码分析_第1张图片
2.向数组添加元素
List接口下arrayList 和linkedList源码分析_第2张图片
3.当添加的元素>10(初始容量)的时候,进行数组 扩容grow(…)
List接口下arrayList 和linkedList源码分析_第3张图片
4.(扩容原理)扩容1.5倍

List接口下arrayList 和linkedList源码分析_第4张图片

总结:
List接口下arrayList 和linkedList源码分析_第5张图片

 jdk1.8下   arrayList源码

1.创建arrayList时候,调用无参构造,相比jdk1.7,并未初始化数组长度
在这里插入图片描述
此时未指定数组长度,节省了内存
在这里插入图片描述
2.接下来是add方法,在该方法创建数组,初始长度为10,扩容原理同 jdk1.7
总结:
List接口下arrayList 和linkedList源码分析_第6张图片

在这里插入图片描述

java中,>> 和 >>> :
> >:带符号右移。正数右移高位补0,负数右移高位补1
> > >:无符号右移。无论是正数还是负数,高位通通补0

对于10 >> 1 ,10的二进制是1010, 右移高位补0之后是0101,对应的是十进制是5,所以 下面结果是15=10+5,相当于扩容1.5倍
在这里插入图片描述

linkedList源码

jdk1.7和1.8无区别

1 无参构造,其中有两个‘节点’属性,Node 是元素/数据 存储的基本单位
List接口下arrayList 和linkedList源码分析_第7张图片
对于Node节点:
List接口下arrayList 和linkedList源码分析_第8张图片

2.调用add方法时,往数组中添加元素
在这里插入图片描述
List接口下arrayList 和linkedList源码分析_第9张图片

总结:在这里插入图片描述

你可能感兴趣的:(java基础巩固)