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