ArrayList

image-20220303162654188

ArrayList拥有两个自己拥有的方法:

  1. 创建完成后,可以通过 void ensureCapacity(int minCapacity) 重新分配数组的大小

  2. trimToSize() 将数组长度缩减至 list.size() 的长度,以节约空间

image-20220303173620626

源代码如下:

  1. AbstractList已经实现了List,但是ArrayList又实现了List,这是作者编码的小失误

  2. AbstractList实现了一些基本方法,方便子类复用

  3. ArrayList底层的存储采用Object[]存储,他是用于存储元素的容器:

    image-20220303163133616
  4. 数组有一定的容量,他会根据元素的数量对数组的容量进行扩容,创建时,可以指定初始化容量

    image-20220303163519515

    在JDK8以下,默认容量为10。

  5. 数组的容量有可能没有用完,所以在内部记录了真正有效的数据长度,也就是size()方法的结果:

    image-20220303163745502
  6. 当发生元素的添加、删除操作,size 字段都会发生变化,且当添加时数组容量不够,将会发生扩容

    image-20220303165339417
  7. 扩容的方法逻辑如下,计算新的容量,其中minCapacity为10,也就是说,当空的ArrayList发生add操作时,会直接扩容为10容量。

    image-20220303165429096
  8. 扩容倍数为 1.5

    image-20220303165636673

1.6 会初始化时就分配10的数组空间,而1.8只有添加数据时,才会分配10的空间。其他基本相同。

最后更新于