ArrayList 的扩容?

110 阅读1分钟

在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 等公共方法。