当前位置: 首页 > 面试题库 >

为什么ArrayList 10的默认容量是多少?

燕朝明
2023-03-14
问题内容

我看到了ArrayList的Java文档,发现ArrayList的初始容量为10。

 /**
 * Constructs an empty list with an initial capacity of ten.
 */
public ArrayList() {
this(10);
}

我认为这是2的幂是有道理的,但为什么是10?

我还检查了HashMap的初始容量,这是16,这很有意义。

/**
 * The default initial capacity - MUST be a power of two.
 */
static final int DEFAULT_INITIAL_CAPACITY = 16;

/**
 * Constructs an empty <tt>HashMap</tt> with the default initial capacity
 * (16) and the default load factor (0.75).
 */
public HashMap() {
    this.loadFactor = DEFAULT_LOAD_FACTOR;
    threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);
    table = new Entry[DEFAULT_INITIAL_CAPACITY];
    init();
}

数字10后面是否有具体原因?


问题答案:

ArrayList是简单的增长数组。当尝试添加元素并且超出缓冲区大小时,它只是在增长。因此,初始大小可以是任何正值。

1将太少。即使有一些元素,我们也会有一些调整大小的操作。

100将损失空间。

因此,十是妥协。为什么是10,而不是12或8?第一个提示是,已分析了典型的用例,这是性能损失和空间损失之间的最佳匹配。但是,我认为,看到Sun的原始代码后,它并没有进行深入的分析,而是一个任意的“不要太小,不要太大”的数字。



 类似资料:
  • 我正在使用JAXP XSLT API(javax.xml.transform)来转换xml文件。 TransformerFactory的javadoc表示:它使用以下有序查找过程来确定要加载的TransformerFactory实现类: 使用javax。xml。使改变TransformerFactory系统属性 使用JRE目录中的属性文件“lib/jaxp.properties”。此配置文件采用标

  • 问题内容: 我记得在Java 8之前,默认容量是10。 令人惊讶的是,对默认(void)构造函数的评论仍然是: 来自: 问题答案: 从技术上讲,如果您允许对备用数组进行延迟初始化,则它为,而不是零。看到: 哪里 您所指的只是在所有最初为空的对象之间共享的大小为零的初始数组对象。即 懒惰地保证的容量,Java 7中也存在这种优化。 __ 诚然,建设者合同并不完全准确。也许这是造成混乱的根源。 背景

  • 首先,我的声明是: 我的主要活动获取编号和文本: 我的Activity2应该得到数字和文本: 文本很受欢迎,但数值始终为0。

  • 问题内容: 我正在尝试解析MySQL 文档。他们可能会更清楚。他们似乎在说的是,有五种可能性:SET NULL,NO ACTION,RESTRICT,CASCADE和SET DEFAULT。 NO ACTION和RESTRICT会执行相同的操作(防止破坏FK的任何数据库更改),并且该操作是默认操作,因此,如果省略ON DELETE子句,则表示NO ACTION(或RESTRICT -是相同的操作)

  • Kubernetes的pods(部署)活跃性和就绪性问题可以用这个初始延迟来配置----这意味着问题将在容器启动后的这多次发送之后开始。如果没有指定,默认值是多少?我好像找不到了。periodSeconds的默认值记录为10秒。 谢谢

  • 问题内容: 根据此答案:urllib2读取为Unicode 我必须获取内容类型才能更改为unicode。但是,某些网站没有“字符集”。 例如,此页面的[‘content-type’]是“ text / html”。我无法将其转换为unicode。 是否有默认的“编码”(当然是英文)…,以便在找不到任何内容的情况下可以使用它? 问题答案: 是否有默认的“编码”(当然是英文)…,以便在找不到任何内容的