话不多说、直接进入正题
-
首先看看ArrayList继承关系
-
构造方法
-
new ArrayList<>() 构造方法只 初始化了一个空数组对象
-
new ArrayList<>(Collection<? extends E> c) 构造参数为一个新的集合对象
-
c.toArray() 方法每次调用都会重新生成返回一个新数组对象,所以传入参数的改变不会影响当前集合的值
-
-
new ArrayList<>(15) 构造参数为一个初始数组大小
-
-
add 方法
-
集合扩容
-
ensureCapacityInternal(size + 1) 外层方法,内部包含数组扩容的逻辑
- size 表示当前内部数组元素的可写下标,新增元素都会 ++;
-
calculateCapacity 默认情况下数组大小为 DEFAULT_CAPACITY = 10
-
ensureExplicitCapacity 外部校验是否需要发生数组扩容 (内部数组可写下标 size + 1 > 数组长度) 发生扩容 grow
-
grow(minCapacity) 扩容
-
扩容逻辑: 当前数组大小 + (当前数组大小 / 2), 扩容之后比扩容之前大了1/2
-
-
-
-
get(index) 取值
-
rangeCheck(index) 取值范围校验
-
elementData(int index) 数组对应下标值
-
-
E set(int index, E element) 插入方法
-
rangeCheck(index) 范围校验
-
新值替换旧值,方法返回旧的值
-
-
size 方法 返回 size值
-
sort 内部调用了数组工具的sort 排序方法
-
contains 是否包含
-
内部调用了 indexOf 方法, 遍历整个数组,比较. 确认是否包含
-
-
clear() 清除
-
元素内部引用值为null,size = 0
-