作者:倒转流年1990 | 来源:互联网 | 2024-12-22 11:35
在Java编程中,您可能会遇到需要将多个数组插入到ArrayList中的情况。然而,如果处理不当,可能会导致所有插入的数组最终具有相同的值。本文将详细解释这一现象及其解决方法。
以下是原始代码示例:
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
int[] parent = new int[4];
for (int i = 0; i <2; i++) {
parent[0] = rand(4,1);
parent[1] = rand(6, -2);
parent[2] = rand(2, 1);
parent[3] = rand(-1, -2);
list.add(parent);
}
// 打印父数组
for (int i = 0; i <2; i++) {
int[] arr;
arr = list.get(i);
for (int j = 0; j System.out.println("Value " + arr[j]);
}
System.out.println("Next Array");
}
}
Rand函数用于生成指定范围内的随机数:
public static int rand(int max, int min) {
Random rand = new Random();
return rand.nextInt(max + 1 - min) + min;
}
运行此代码时,您会发现两个数组的值完全相同。这是因为您创建了一个数组并多次修改其内容,然后将其添加到列表中。因此,列表中的所有引用都指向同一个数组实例。
要解决这个问题,您应该在每次循环中创建一个新的数组实例,而不是重复使用同一个数组。修改后的代码如下:
for (int i = 0; i <2; i++) {
int[] parent = new int[4];
parent[0] = rand(4,1);
parent[1] = rand(6, -2);
parent[2] = rand(2, 1);
parent[3] = rand(-1, -2);
list.add(parent);
}
通过这种方式,每次循环都会创建一个新的数组实例,并将其添加到列表中,确保每个数组的内容都是独立的。这样可以避免所有数组在插入后变得相同的问题。