重点
扩容规则:底层是System.arraycopy()这个方法
- 每次扩容都是将新容量设置为1.5 * 旧容量
- 新容量如果小于需要的容量,将新容量设置为需要的容量
- 新容量如果大于可以分配的最大容量(整型最大值 - 8),新容量设置为(需要的容量小于最大分配容量)需要的容量或者设置为(需要的容量大于最大分配容量)整型最大值
懒加载机制:ArrayList初始化的时候并没有直接给数组分配容量,而是使用的一个空数组进行赋值,只有当第一次增加的时候才会真正的给数组进行容量分配。这样是为了防止用户初始化后没有进行使用导致内存的浪费。(只有用户调用无参构造方法的时候才是懒加载,其他两个构造函数是分配的另外一个空数组)