如何在Java中更改数组的长度?[复制]

mfuanj7w  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(108)

此问题已在此处有答案

Java dynamic array sizes?(19回答)
8年前关闭。
所以我被分配了一个项目,我有一个数组。
当用户将元素放入这个数组时,一旦它满了,它的长度就必须加倍

不允许使用ArrayListscollections接口中的任何内容*。*

我尝试做的是创建一个新数组,一旦旧数组已满,然后将值复制到新数组
问题是我不知道要做多少次新数组,所以我想知道如何解决这个问题。

5f0d552i

5f0d552i1#

数组是固定长度的。如果你想要一个可变长度的数据结构,使用ArrayList

zzoitvuj

zzoitvuj2#

由于海报明确指出作业的要求不包括使用集合,另一种方法是使用System.arraycopy()。在这种方法中,您只维护一个数组,当您向其中添加项目时,您使用System.arraycopy()将旧数组复制到一个新的更大的数组中。System.arraycopy()相对较快,实际上是ArrayList扩展其大小的方式。
如果你担心使用System.arraycopy()的成本,你可以只在你的数组已满并创建一个具有更多空间的新数组时使用它。例如,创建一个大小为20的数组。当它满了时,将它复制到大小为40的数组。当它满了时,将它复制到大小为60的数组。
有趣的是,ArrayList的大小增加了

int newCapacity = (oldCapacity * 3)/2 + 1;

当旧数组满了的时候。大概这篇文章的作者在需要的时候把数组增长多少上花了很多心思。这可能是值得做的。

相关问题