<分区>
为什么数组的长度是不可变的(至少在 java 中是这样)?我对编程语言的内部工作原理几乎一无所知,所以对我来说,使数组的长度可变似乎很容易。我认为数组长度不可变是有充分理由的,可能与性能有关。有人知道这个原因吗?
如果之前有人问过这个问题,我很抱歉。如果有,我在大约 10 分钟的搜索中没有找到它。
编辑:我知道初始化数组时,会分配一定数量的内存。为什么不能分配更多的内存?
<分区>
为什么数组的长度是不可变的(至少在 java 中是这样)?我对编程语言的内部工作原理几乎一无所知,所以对我来说,使数组的长度可变似乎很容易。我认为数组长度不可变是有充分理由的,可能与性能有关。有人知道这个原因吗?
如果之前有人问过这个问题,我很抱歉。如果有,我在大约 10 分钟的搜索中没有找到它。
编辑:我知道初始化数组时,会分配一定数量的内存。为什么不能分配更多的内存?
最佳答案
这个问题的本质在于语言设计者如何选择划分语言需要执行的任务,并将这些任务分配给不同的结构。
在 Java 中,标准数组类型具有固定长度,因为它旨在成为开发人员可以在其上构建的低级、基本实现。
相比之下,如果您想要功能更全的阵列,请查看 ArrayList<>
类(class)。我们的想法是为您(开发人员)提供广泛的工具选择,以便您始终可以选择适合工作的工具。
在谈论数组时,允许可变长度数组所必需的机制很重要。因此 Java 的创建者选择将此功能放在 ArrayList<>
中。类,而不是让任何只想要一个简单数组的人都必须承担开销。
为什么加长数组很重要?计算机内存是有限的,因此我们必须将对象并排存储。当您想延长数组时,如果附近的内存地址中已经有另一个对象怎么办?
在这种情况下,没有足够的空间来就地延长数组,因此必须四处移动数据以腾出空间。通常这是通过找到一个更大的空内存块,并在延长它的同时复制数组来完成的。如何以最好的方式做到这一点的数学(例如,要留下多少空白空间?)是有趣且不平凡的。 ArrayList<>
为你抽象了这个过程,所以你不必自己处理,你可以相信 ArrayList<>
的设计者类选择了一个对您的应用程序表现良好(平均)的实现。
关于java - 为什么数组的长度是不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20007600/