Java如何更改数组的大小?

示例

简单的答案是您不能这样做。创建数组后,无法更改其大小。相反,只能通过创建具有适当大小的新数组并将元素从现有数组复制到新数组来“调整大小”。

String[] listOfCities = new String[3];   // 使用大小3创建的数组。

listOfCities[0] = "New York";

listOfCities[1] = "London";

listOfCities[2] = "Berlin";

例如,假设需要将一个新元素添加到listOfCities如上定义的数组中。为此,您将需要:

  1. 创建一个大小为4的新数组

  2. 将旧数组的现有3个元素复制到偏移量为0、1和2的新数组,然后

  3. 将新元素添加到偏移量为3的新数组中。

有多种方法可以完成上述操作。在Java 6之前,最简洁的方法是:

String[] newArray = new String[listOfCities.length + 1];

System.arraycopy(listOfCities, 0, newArray, 0, listOfCities.length);

newArray[listOfCities.length] = "Sydney";

从Java 6开始,Arrays.copyOfandArrays.copyOfRange方法可以更简单地做到这一点:

String[] newArray = Arrays.copyOf(listOfCities,listOfCities.length+ 1);

newArray[listOfCities.length] = "Sydney";

有关复制数组的其他方法,请参见以下示例。请记住,调整大小时,您需要一个长度与原始长度不同的数组副本。

  • 复制数组

数组大小调整的更好替代方法

如上所述,调整数组大小有两个主要缺点:

  • 这是低效的。使数组更大(或更小)需要复制许多或所有现有的数组元素,并分配新的数组对象。阵列越大,获得的成本就越高。

  • 您需要能够更新任何包含对旧数组的引用的“活动”变量。

一种选择是创建具有足够大尺寸的数组作为开始。仅当您可以在分配数组之前准确确定该大小时,这才可行。如果您不能执行此操作,则再次出现调整数组大小的问题。

另一种选择是使用Java SE类库或第三方库提供的数据结构类。例如,Java SE“集合”框架提供了具有不同运行时属性的List,Set和MapAPI的多种实现。的ArrayList类是最接近于普通数组的性能特性(例如O(N)查找,O(1)get和集,O(N)随机插入和删除),同时没有参考更新的问题提供更有效大小调整。

(的调整大小效率ArrayList来自其将每次调整大小的支持数组的大小加倍的策略。对于典型的用例,这意味着您仅偶尔调整大小。当您摊销列表的生命周期时,每次调整大小的成本插入件是O(1),它可以是能够调整一个普通阵列时使用相同的策略。)

以上是 Java如何更改数组的大小? 的全部内容, 来源链接: utcz.com/z/355572.html

回到顶部