水一篇
对于 ArrayList 集合添加元素,我们总结一下:
①、当通过 ArrayList() 构造一个空集合, 初始长度是为0的,第 1 次添加元素, 会创建一个长度为10的数组,并将该元素赋值到数组的第一个位置。
②、第 2 次添加元素, 集合不为空,而且由于集合的长度size+1是小于数组的长度10,所以直接添加元素到数组的第二个位置,不用扩容。
③、第 11 次添加元素,此时 size+1 = 11,而数组长度是10,这时候创建一个长度为10+10*0.5 = 15 的数组( 扩容1.5倍),然后将原数组元素引用 拷贝到新数组。并将第 11 次添加的元素赋值到新数组下标为10的位置。
④、第 Integer.MAX_VALUE - 8 = 2147483639,然后 2147483639%1.5=1431655759(这个数是要进行扩容) 次添加元素,为了 防止溢出,此时会直接创建一个 1431655759+1 大小的数组,这样一直, 每次添加一个元素,都只扩大一个范围。
⑤、第 Integer.MAX_VALUE - 7 次添加元素时, 创建一个大小为 Integer.MAX_VALUE 的数组,在进行元素添加。
⑥、 第 Integer.MAX_VALUE + 1 次添加元素时,抛出 OutOfMemoryError 异常。
注意: 能向集合中添加 null 的,因为数组可以有 null 值存在。