如何在Java中扩展数组而不更改其名称

Kaj*_*jsa 9 java arrays extend

我想知道是否可以在Java中扩展数组但不更改其名称,因为我有多个方法链接到此数组.我正在考虑创建一个名称相同但大两倍的新数组,然后将所有元素从第一个数组复制到第二个数组.这可能吗?
基本上我想在银行创建一个包含帐户的数组,如果客户创建了这么多的数据,那么数组就没有足够的元素,那么它应该扩展自己.
谢谢你的回复!

kha*_*hik 10

您无法更改所拥有的数组,但可以创建具有所需类型和大小的新数组,将数据从原始数组复制到新创建的数组,然后将其分配给原始数组变量.

但你不应该这样做.

而不是数组使用任何实现java.util.List.ArrayList我认为这是一个很好的选择.

  • 有时,您不希望使用ArrayList是完全合理的原因.例如,如果源是由其他组件创建的数组,则无法更改. (3认同)

Syl*_*oux 10

即使ArrayList在许多情况下使用a 可能是一个好建议,使用普通旧数组也是完全合理的.

在这种情况下,如果需要调整阵列大小,可能需要调查其中一种java.utils.Arrays.copyOf方法.请注意,这些不会真正调整您的阵列大小.它们只会创建一个新数组并复制常用项.

如果新数组的大小大于旧数组,则新项将初始化为某个默认值(即:falsefor boolean[],nullfor T[]- 有关详细信息,请参阅文档).你必须使用那样的功能:

myArray = copyOf(myArray, myNewSize); 
Run Code Online (Sandbox Code Playgroud)

但请记住,此方法将始终返回一个数组.即使请求的大小与原始大小相同.如果这不是理想的,你将不得不写类似的东西:

myArray = (myNewSize > myArray.length) ? copyOf(myArray, myNewSize) : myArray;
Run Code Online (Sandbox Code Playgroud)


the*_*ejh 5

使用ArrayList,它会为您完成所有这些。只需调用add()addAll()附加内容。

  • @Kajsa:`ArrayList<SimpleAccount> accounts = new ArrayList<SimpleAccount>();` (2认同)

小智 5

这是我为Java编程类编写的一种方法

private static double[] extendArraySize(double [] array){
    double [] temp = array.clone();
    array = new double[array.length + 1];
    System.arraycopy(temp, 0, array, 0, temp.length);
    return array;
}
Run Code Online (Sandbox Code Playgroud)

尽管在使用方式上必须将分配给数组的数组以传递的数组名称作为自变量,并且该方法的数据类型必须始终是传递的数组的类型,但它的工作方式还是很自白的。

例:

double [] z = {1,2,3};  //size of z = 3; [0,1,2]   VALUES: [1,2,3]
z = extendArraySize(z); //size of z = 4; [0,1,2,3] VALUES: [1,2,3,0];
Run Code Online (Sandbox Code Playgroud)

抱歉,如果它经过详尽的解释,我敢肯定,有一种更好的方法是通过矢量或数组列表来实现的。但是,如果您要扩展基本数组,则这是一种实现方法。

希望我能帮助= D

  • 这个解决方案在内存上非常轻,因为它只分配它需要的数组。另一方面:如果您无论如何都返回扩展数组,则不需要将数组克隆到临时数组中。 (2认同)