本文介绍了在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的现在零的默认容量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-18 05:33