JAVA基础集合框架【一】ArrayList之初始容量分析
文章首发于:clawhub.club
在看ArrayList源码的时候,看到两个常量没理解:EMPTY_ELEMENTDATA和DEFAULTCAPACITY_EMPTY_ELEMENTDATA
1 | /** |
都是表示默认空数组,根据ArrayList的构造函数,如下:
1 | public ArrayList(int initialCapacity) { |
可以看出,只有无参构造用了DEFAULTCAPACITY_EMPTY_ELEMENTDATA常量,另外都是用了EMPTY_ELEMENTDATA。
再看add(int index, E element)、addAll(Collection<? extends E> c)、addAll(int index, Collection<? extends E> c)方法中调用的calculateCapacity:
1 | private static int calculateCapacity(Object[] elementData, int minCapacity) { |
可以发现:如果是无参构造函数生成的ArrayList对象,在第一次怎加元素的时候,ArrayList初始容量是10。有参构造函数创建时,初始容量根据入参决定,如果要创建空数组,则都指向了EMPTY_ELEMENTDATA,
即减少了不必要的空数组。
理解:
这两个类常量都是空 Object 数组的引用,都代表 ArrayList 实例的空状态,也即是 elementData 数组中还没有元素。
- EMPTY_ELEMENTDATA 是使用带初始化值的构造方法(有参构造函数,一个是指定初始容量,一个是指定初始集合)时使用的,
- DEFAULTCAPACITY_EMPTY_ELEMENTDATA 是使用默认的构造方法,也即是无参的构造方法时使用的。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!