package ArrayListImprove20240724;
import java.util.ArrayList;
import java.util.List;
public class ArrayListImprove {
public static void main(String[] args) {
List<Integer> arraylist = new ArrayList<>();
// 创建一个ArrayList对象时,底层先创建了一个长度为0的数组
// elementDate,创建变量size
// size有两个作用:集合的长度(元素的个数)和下一个元素应该添加的位置
arraylist.add(5);
/* 添加一个元素其实有点复杂:如果现在的size≠数组的长度(数组没有存满),则
直接在size所指的位置添加元素,然后size++
但是若size=数组的长度(相当于已经存满了),那么就会调用ArrayList中的grow方法,先对数组进行扩容
然后再存入元素*/
/* 数组扩容的原理:第一次添加元素的时候,数组长度是0,会用grow进行扩容,这时的扩容长度是10(设定的第一次扩容10),
但是当10个元素存满之后,想要添加第11个元素,也会进行grow扩容,此刻算出至少需要扩容的长度是1,然后grow方法中
可以计算出需要扩容1,然后grow有个默认扩容机制——将老容量左移1位作为扩容的大小,当需要扩容的大小小于默认扩容机制的时候,
将使用默认的扩容机制扩容——新数组是原来的1.5倍(长度是原来的1.5倍);但是当需要扩容的长度大于了默认扩容的长度,
则以实际的长度为准 */
/* 举个例子:当默认长度位10的数组已经存满了,再想存元素,按理来说默认的扩容是将10扩容为15,但是假如想一次添加100个
元素,15显然不够,这时就会以实际需要添加的元素为准,将其扩容为长度为110的数组,而不是默认的1.5倍长度的15的数组 */
}
}