β

ArrayList的初始容量现在为0,不再是10了

Harries Blog™ 29 阅读

一直记得 ArrayList 的初始容量大小是10,今天再次看ArrayList的 源码 (版本:Jdk 7u80)时发现在构造函数的 注释 上写着初始化容量是10,但是构造函数中却没有指定初始容量,仅仅初始化了一个空的数组。应该是不知道在哪个版本中已经修改了,我却还记着之前从别人口里得来的一句话:初始容量是10。实际上初始容量已经是0了,写出来分享下,有错的地方烦请指出来,说的不一定对。

测试

写了下 代码 来测试下,ArrayList中没有直接获取capacity的方法,只能通过反射获取elementData数组的size来间接获取到capacity。代码如下:

public class ArrayListCapacityTest {

    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        System.out.println("capacity: " + getCapacity(arrayList) + " size: " + arrayList.size());

        arrayList.add("test");
        System.out.println("capacity: " + getCapacity(arrayList) + " size: " + arrayList.size());

        arrayList = new ArrayList(11);
        System.out.println("capacity: " + getCapacity(arrayList) + " size: " + arrayList.size());
        }

    public static int getCapacity(ArrayList arrayList) {
        try {
            Field elementDataField = ArrayList.class.getDeclaredField("elementData");
            elementDataField.setAccessible(true);
            return ((Object[]) elementDataField.get(arrayList)).length;
        } catch (NoSuchFieldException | IllegalAccessException e) {
            e.printStackTrace();
            return -1;
        }
    }
}
作者:Harries Blog™
追心中的海,逐世界的梦
原文地址:ArrayList的初始容量现在为0,不再是10了, 感谢原作者分享。

评论

  • ArrayList的数组是在add方法时初始化,也就是10,实例化时只是将一个长度为0的常亮空数组赋给了elementData属性

    回复   |   angle 发表于 2018-10-31 17:00:11

发表评论