最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
ArrayList拥有两个自己拥有的方法:
创建完成后,可以通过 void ensureCapacity(int minCapacity)
重新分配数组的大小
trimToSize()
将数组长度缩减至 list.size()
的长度,以节约空间
源代码如下:
AbstractList
已经实现了List
,但是ArrayList
又实现了List
,这是作者编码的小失误
AbstractList
实现了一些基本方法,方便子类复用
ArrayList
底层的存储采用Object[]
存储,他是用于存储元素的容器:
数组有一定的容量,他会根据元素的数量对数组的容量进行扩容,创建时,可以指定初始化容量
在JDK8以下,默认容量为10。
数组的容量有可能没有用完,所以在内部记录了真正有效的数据长度,也就是size()
方法的结果:
当发生元素的添加、删除操作,size 字段都会发生变化,且当添加时数组容量不够,将会发生扩容
扩容的方法逻辑如下,计算新的容量,其中minCapacity
为10,也就是说,当空的ArrayList发生add操作时,会直接扩容为10容量。
扩容倍数为 1.5
倍
1.6 会初始化时就分配10的数组空间,而1.8只有添加数据时,才会分配10的空间。其他基本相同。