集合
ArrayList源码分析
❒ 数组初始化方法有三个 ✔ 第一: 指定数组长度。 ✔ 第二: 无参构造函数。 ✔ 第三: 参数是一个线性集合(Collect)。 ❒ 数组的新增过程 ✔ 一般我们使用的都是无参构造函数去创建数组。 ✔ 每次新增的时候会先判断当前 size+1 和当前elementData长度哪个大,默认 size + 1 (0 + 1) > elementData.length(0)。 ✔ 所以第一次添加数据,数组便会扩容一次,长度为 DEFAULT CAPACITY = 10。 ✔ 当添加数据大于10的时候,便会再次触发扩容,扩容公式为 elementData.length + length >> 1 (扩容0.5倍,加上原来大小是1.5倍)。 ✔ 扩容时,需要对数组进行拷贝 elementData = Arrays.copyOf(elementData, newCapacity)。
❒ ArrayList底层的实现原理是什么 ✔ ArrayList底层是用动态的数组实现的。 ✔ ArrayList初始容量为0,当第一次添加数据的时候才会初始化容量为10,ArrayList在进行扩容的时候是原来容量的1.5倍,每次扩容都需要拷贝。 ❒ 数组ArrayList在添加数据的过程 ✔ 确保数组已使用长度(size)加1之后足够存下下一个数据。 ✔ 计算数组的容量,如果当前数组已使用长度+1后的大于当前的数组长度,则调用grow方法扩容(原来的1.5倍)。 ✔ 确保新增的数据有地方存储之后,则将新元素添加到位于size的位置上。 ✔ 返回添加成功布尔值。