繁体   English   中英

为什么Java数组是固定长度的?

[英]Why are Java arrays fixed length?

int[] array = new int[10]; // Length is fixed when the array is created.

创建数组时将确定数组的长度。 创建后,其长度是固定的。

为什么一定要这样呢?

正如其他答案所指出的那样,固定大小是定义的一部分,您必须与原始作者联系,以找到真相。

但总的来说,实现可变长度的容器要复杂得多,并且有许多策略可以实现这一目标(链接列表,内存重新分配...)。

如果作者在1990年代初将数组定义为可变长度,则会产生一些不良后果:

  • 数组的核心JVM定义将更加复杂,并且所有实现都将被迫在低级别提供这种复杂性;
  • 在给定的JVM中,将存在“一刀切”的调整大小实现,这可能无法满足许多用例;
  • 不同的实现可能会引入较大的性能差异,这可能需要附加的复杂约束定义;
  • 它引入了围绕边界检查数组的线程安全问题,因为a.length变得可变;
  • 表达扩展的其他语言支持=>更大的语言;
  • 对数组下标的性能影响,可能缺少O(1)索引;
  • C和C ++程序员不熟悉的领域,他们习惯于不可扩展的数组(或在库中提供了这种机制);
  • 将可变长度机制铸造成石头,这种可变长度机制已经可以由更高级别的结构充分处理(以前是java.util.Vector ,现在是Java Collections,Guava等)。

综上所述,人们普遍希望Java起源于C语言家族中的数组是用于构建更高级别结构的简单工具-那时,固定大小限制为零。 现在,我们可以选择这种结构的实现( LinkedListArrayList等),它们提供了运行时行为的选择,并且大多数开发人员都使用这些抽象。

那就是Java array s的定义:

数组是一个容器对象,包含固定数量的单个类型的值

(请参阅此处 )。

ArrayList用于可变大小的数组实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM