栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java 8中,为什么ArrayList的默认容量现在为零?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java 8中,为什么ArrayList的默认容量现在为零?

从技术上讲,

10
如果您允许对备用数组进行延迟初始化,则它为,而不是零。看到:

public boolean add(E e) {    ensureCapacityInternal(size + 1);    elementData[size++] = e;    return true;}private void ensureCapacityInternal(int minCapacity) {    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {        minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);    }    ensureExplicitCapacity(minCapacity);}

哪里

private static final int DEFAULT_CAPACITY = 10;

您所指的只是在所有最初为空的

ArrayList
对象之间共享的大小为零的初始数组对象。即 懒惰地
10
保证的容量,Java 7中也存在这种优化。
__

诚然,建设者合同并不完全准确。也许这是造成混乱的根源。

背景

这是Mike Duigou的电子邮件

我已经发布了空ArrayList和HashMap补丁的更新版本。

http://cr.openjdk.java.net/~mduigou/JDK-7143928/1/webrev/

修订后的实现 没有 为这两个类引入 任何新字段
。对于ArrayList,仅当列表以默认大小创建时才进行后备阵列的延迟分配。根据我们的性能分析团队的说法,大约有85%的ArrayList实例是在默认大小下创建的,因此此优化将在绝大多数情况下有效。

对于HashMap,创意使用阈值字段来跟踪请求的初始大小,直到需要存储桶数组为止。在读取方面,使用isEmpty()测试空映射案例。在写入大小上,比较(table
== EMPTY_TABLE)用于检测是否需要对存储桶数组进行充气。在readObject中,还有更多工作来尝试选择有效的初始容量。

来自: http : //mail.openjdk.java.net/pipermail/core-libs-
dev/2013-April/015585.html



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/449563.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号