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

14

我想知道在Java中是否有可能扩展数组但不更改其名称,因为我有多个与此数组相关联的方法。我正在考虑创建一个名称相同但两倍大小的新数组,然后将第一个数组中的所有元素复制到第二个数组中。这是可能的吗?
基本上,我想创建一个银行账户数组,如果客户创建的帐户太多,使得数组元素不足,它应该自动扩展。
谢谢任何回复!


不是Java开发人员,但如果需要一个动态大小的数组,一个类型化的Vector是一个不错的选择吗? - George Profenza
所以目前我的数组看起来是这样的:SimpleAccount [] AccountArray = new SimpleAccount[10]; 那么我该如何将它更改为 ArrayList 呢? - Kajsa
5个回答

14
即使在许多情况下使用 ArrayList 是一个好建议,但有时也可以完全合理地使用 普通的旧数组

在这种情况下,如果您需要调整数组大小,则可能需要研究其中一个 java.utils.Arrays.copyOf 方法。然而请注意,这些方法不会真正地 调整 数组大小,它们只是创建一个新数组并复制公共项。

如果新数组的大小大于旧数组,则新项目将被初始化为某个默认值(例如:对于 boolean[]false,对于 T[]null -- 详见文档)。您必须像这样使用这些函数:

myArray = copyOf(myArray, myNewSize); 

记住,这种方法总是会返回一个的数组。即使请求的大小与原始大小相同。如果这不是你想要的,你需要编写类似于以下的代码:

myArray = (myNewSize > myArray.length) ? copyOf(myArray, myNewSize) : myArray;

9

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

但是您不应该这样做。

不要使用数组,而是使用任何java.util.List的实现。我认为ArrayList是这种情况下的一个好选择。


6
有时你不想使用 ArrayList 是有完全合理的理由的。例如,如果源是由其他组件创建且无法更改的数组。 - racs

6

这是我为我的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;
}

它的工作原理非常简单。在使用它的过程中,必须将数组指定为方法的参数,并且方法的数据类型必须始终是传递进去的数组类型。

例如:

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];

如果我解释得很糟糕,而且我相信有更好的方式使用向量或ArrayLists做这件事。但是,如果你想扩展原始数组,这是一种方法。

希望我能帮到你 =D


2
这个解决方案在内存方面非常轻量级,因为它只分配了所需的数组。 另一方面,如果您返回扩展数组,则不需要将数组克隆到临时数组中。 - racs

5
使用 ArrayList,它可以帮你完成这一切。只需调用 add()addAll() 来添加内容即可。

太好了!目前我的数组看起来是这样的:SimpleAccount [] AccountArray = new SimpleAccount[10]; 那么我该如何将它改为 ArrayList 呢? - Kajsa
2
@Kajsa: ArrayList<SimpleAccount> accounts = new ArrayList<SimpleAccount>(); - thejh

0
public static void extendarrayafterinitialization(int [] x){
        Scanner input =new Scanner(System.in);
        System.out.print("How many values do you need to insert to the Array : ");
        int how=input.nextInt();
        int length=x.length+how;
        int [] all=new int[length];
        int value=0;
        System.out.println(length);
        for(int i=0;i<x.length;i++){
            all[i]=x[i];
            }
            for(int j=x.length;j<length;j++){
                System.out.print("Enter new value : ");
                int index=input.nextInt();
                all[j]=index;
                }
        for(int print : all){
            System.out.println(print);
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接