在Java 8中,ArrayList 的扩容是通过 ensureCapacity 方法来实现的。ensureCapacity 方法用于确保 ArrayList 至少能够容纳指定数量的元素,如果当前容量不足,则会进行扩容操作。
当你向 ArrayList 添加元素时,如果当前元素数量已经达到容量上限,ArrayList 会调用 ensureCapacity 方法来增加其容量。默认情况下,ArrayList 的初始容量为10,但是你可以通过构造函数或 ensureCapacity 方法来设置初始容量。扩容时,新容量的计算方式为原容量的1.5倍。
以下是一个简单的示例,演示了 ArrayList 的扩容过程:
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
// 创建一个初始容量为10的ArrayList
ArrayList<String> arrayList = new ArrayList<>();
// 添加元素,触发扩容
for (int i = 0; i < 15; i++) {
arrayList.add("Element " + i);
}
// 打印ArrayList的元素数量和容量
System.out.println("Size: " + arrayList.size());
System.out.println("Capacity: " + getArrayListCapacity(arrayList));
}
private static int getArrayListCapacity(ArrayList<?> arrayList) {
try {
java.lang.reflect.Field elementDataField = ArrayList.class.getDeclaredField("elementData");
elementDataField.setAccessible(true);
return ((Object[]) elementDataField.get(arrayList)).length;
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
return -1;
}
}
}
请注意,上述代码使用了反射来获取 ArrayList 内部的数组容量,这是为了演示目的。在实际应用中,最好不要直接依赖于内部实现的细节,而是使用 size() 和 ensureCapacity 等公共方法。