阅读背景:

ArrayList源码分析(jdk11)_一颗栗子栗的博客

来源:互联网 

参数:

    private static final int DEFAULT_CAPACITY = 10;//默认初始容量
    
     /**
     * 用户指定容量为0时返回数组
     */
    private static final Object[] EMPTY_ELEMENTDATA = {};
    
     /**
     * 用户调用无参构造函数,在第一次添加元素时会以DEFAULT_CAPACITY扩容
     */
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

    /**
     * 保存数据,数组大小是arraylist的容量
     * transient:表示对象序列化时不包括该数组(writeObject()和readObject()实现对数组序列化和反序列化)
     * 原因:elementData是一个缓存数组,它通常会预留一些容量,等容量不足时再扩充容量,
     * 那么有些空间可能就没有实际存储元素,采用上诉的方式来实现序列化时,
     * 就可以保证只序列化实际存储的那些元素,而不是整个数组,从而节省空间和时间。
     */
    transient Object[] elementData; // non-private to simplify nested class access

    /**
     * arraylist中实际大小(保存数据数量)
     */
    private int size;  
    
    /**
     * 可以分配数组的最大值
     * OutOfMemoryError: 申请数组大小超过vm限制
     */
    private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

    private static final int DEFAU



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: