Java 数组改变大小

3

我需要改变一个数组的大小,但是我不能简单地创建另一个 - 它需要相同的名称,这样我才能将它传递给一个方法。具体而言,我需要让数组的术语数量翻倍。这个操作可以用一个数组完成吗?我可以从数组A复制数据到数组B,然后使得A引用与B相同的数据,即 A = B; 吗?


5
为什么不使用List呢? - aroth
不需要相同的名称即可将其传递给方法。只需使用新变量作为参数调用该方法即可。 - The Nail
7个回答

7
我使用了Arrays.copyOf方法,如下所示:
    int myArray[] = {1,2,3};
    myArray = Arrays.copyOf(myArray, myArray.length+1);
    //previous line creates a copy of the array and adds one to the size

    myArray[3] = 12; // assign the new fourth element the value of 12
    //then loop through the array to output each element
    for(int ctr = 0; ctr<myArray.length; ctr++){
        System.out.println(myArray[ctr]);
    }

2

是的,你的数组变量可以引用同一类型但大小不同的数组。

如果要在内部进行更改,使用ArrayList可能更容易。


2

由于数组大小是静态的,所以您需要创建一个新的数组。然后使用srcArray = Arrays.copyOf(srcArray, srcArray.length * 2);

或者您可以考虑使用列表而不是数组。 ArrayList 内部由一个数组支持,当需要时它会将其大小加倍。


你是不是想说 Arrays.copyOf() - ziggurism

2

Java中的数组不是这样工作的:

int[] anArray;
anArray = new int[10];

for (int i = 0; i < 10; ++i) {
  // ...
}

int[] secondArray = anArray;

// Grow "anArray" via secondArray to 20 please:
secondArray = new int[20]; // No way to alter anArray with this - now two arrays

最接近的解决方法是在分配数组时使其具有完整的大小,但在准备好之前不要使用它的全部空间。也就是说,您希望在其中预先分配所有需要的空间。

int[] anArray;
anArray = new int[20];

for (int i = 0; i < 10; ++i) { // Still < 10 here
  // ...
}

int[] secondArray = anArray;
// no need to change the array, it's already big enough

要么使用提供的许多容器之一,要么就采用这种方法。

1
int[] a = new int[5];
// fill a
int[] b = Arrays.copyOf(a, 10);

0

相较于数组,使用ArrayList更佳


0

数组就是一个数组。在这里,您可以动态增加数组的大小,同时保持其名称不变。在此示例中,它将增加其大小,直到其索引的总和达到目标值100。

    int goal = 0;
    int[] arr = {1,2,3};

    int i = 0;
    while (goal<100){
        goal+=arr[i];
        i++;
        int[] tmpArray = new int[arr.length];
        for (int j = 0; j < arr.length; j++) {
            tmpArray[j] = arr[j];
        }
        if(i>=arr.length){
            arr = new int[arr.length+1];
            for (int j = 0; j < tmpArray.length; j++) {
                arr[j] = tmpArray[j];
            }
            arr[arr.length-1] = 1;
        }
    }

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