本文介绍了在Java 8,为什么ArrayList的现在零的默认容量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我记得,Java的8前,的ArrayList
的默认容量为10。
出人意料的是,在默认的注释(无效)构造还说:构造一个空列表十的初始容量
从 ArrayList.java
:
/ **
使用默认·共享空数组实例大小的空实例。我们
*区分这种从EMPTY_ELEMENTDATA知道多少时膨胀
*第一个元素被添加。
* /
私有静态最终目标[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};.../ **
*构造一个具有十一个初始容量的空列表。
* /
公众的ArrayList(){
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
解决方案
从技术上讲,这是 10
,不为零,如果你承认为后盾阵列的一个懒惰的初始化。参见:
公共布尔附加(E E){
ensureCapacityInternal(大小+ 1);
elementData中[大小++] = E;
返回true;
}私人无效ensureCapacityInternal(INT minCapacity){
如果(elementData中== DEFAULTCAPACITY_EMPTY_ELEMENTDATA){
minCapacity = Math.max(DEFAULT_CAPACITY,minCapacity);
} ensureExplicitCapacity(minCapacity);
}
其中,
/ **
*默认的初始容量。
* /
私有静态最终诠释DEFAULT_CAPACITY = 10;
什么你指的是所有初始为空的ArrayList
对象共享只是零大小的初始数组对象。即容量 10
是有保障的懒洋洋地的,就是present也是Java 7中。优化
不可否认,构造合同是不完全准确。也许,这就是问题的根源在这里。
背景
下面是由迈克对勾
的电子邮件
这篇关于在Java 8,为什么ArrayList的现在零的默认容量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!