我需要改变一个数组的大小,但是我不能简单地创建另一个 - 它需要相同的名称,这样我才能将它传递给一个方法。具体而言,我需要让数组的术语数量翻倍。这个操作可以用一个数组完成吗?我可以从数组A复制数据到数组B,然后使得A引用与B相同的数据,即 A = B; 吗?
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]);
}
是的,你的数组变量可以引用同一类型但大小不同的数组。
如果要在内部进行更改,使用ArrayList可能更容易。
由于数组大小是静态的,所以您需要创建一个新的数组。然后使用srcArray = Arrays.copyOf(srcArray, srcArray.length * 2);
。
或者您可以考虑使用列表而不是数组。 ArrayList
内部由一个数组支持,当需要时它会将其大小加倍。
Arrays.copyOf()
? - ziggurismJava中的数组不是这样工作的:
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
int[] a = new int[5];
// fill a
int[] b = Arrays.copyOf(a, 10);
相较于数组,使用ArrayList更佳
数组就是一个数组。在这里,您可以动态增加数组的大小,同时保持其名称不变。在此示例中,它将增加其大小,直到其索引的总和达到目标值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;
}
}
List
呢? - aroth