java - 为什么数组的长度是不可变的?

标签 java arrays

<分区>

为什么数组的长度是不可变的(至少在 java 中是这样)?我对编程语言的内部工作原理几乎一无所知,所以对我来说,使数组的长度可变似乎很容易。我认为数组长度不可变是有充分理由的,可能与性能有关。有人知道这个原因吗?

如果之前有人问过这个问题,我很抱歉。如果有,我在大约 10 分钟的搜索中没有找到它。

编辑:我知道初始化数组时,会分配一定数量的内存。为什么不能分配更多的内存?

最佳答案

这个问题的本质在于语言设计者如何选择划分语言需要执行的任务,并将这些任务分配给不同的结构。

在 Java 中,标准数组类型具有固定长度,因为它旨在成为开发人员可以在其上构建的低级、基本实现。

相比之下,如果您想要功能更全的阵列,请查看 ArrayList<>类(class)。我们的想法是为您(开发人员)提供广泛的工具选择,以便您始终可以选择适合工作的工具。

在谈论数组时,允许可变长度数组所必需的机制很重要。因此 Java 的创建者选择将此功能放在 ArrayList<> 中。类,而不是让任何只想要一个简单数组的人都必须承担开销。

为什么加长数组很重要?计算机内存是有限的,因此我们必须将对象并排存储。当您想延长数组时,如果附近的内存地址中已经有另一个对象怎么办?

在这种情况下,没有足够的空间来就地延长数组,因此必须四处移动数据以腾出空间。通常这是通过找到一个更大的空内存块,并在延长它的同时复制数组来完成的。如何以最好的方式做到这一点的数学(例如,要留下多少空白空间?)是有趣且不平凡的。 ArrayList<>为你抽象了这个过程,所以你不必自己处理,你可以相信 ArrayList<> 的设计者类选择了一个对您的应用程序表现良好(平均)的实现。

关于java - 为什么数组的长度是不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20007600/

相关文章:

javascript - 更新 meteor 应用程序中传递给 highcharts 的数组

java - 将 Flux 条目与 previous 和 map 相结合

java - Eclipse 中导入的项目无法运行,显示 - 'Editor does not contain a main type.'

java - Android 应用程序中的 Google 翻译 API

java - 如何在上传到 firebase 时压缩图像?

java - Retrofit + Instagram API 在请求访问 token 时返回错误 400

python - 编写一个从列中选择随机值的循环 - Python

java - 如何从联系人中获取电话号码?

javascript - Vue.js 从数组添加类

javascript - 将 Javascript 对象和子对象转换为对象数组 - lodash