我创建了一个包含 80 个 Arraylist 的 ArrayList。每个 ArrayList 内部的值为 1-9。
但是,当我从其中一个数组列表中删除一个值时,它会在所有数组列表中删除。
ArrayList<List> available = new ArrayList<List>();
ArrayList<Integer> possibleValues = new ArrayList<Integer>();
for(int j = 1; j<=9; j++){
possibleValues.add(j);
}
for (int i = 0; i<=80; i++){
available.add(possibleValues);
}
int b = (int) available.get(0).get(2);
available.get(0).remove(0);
String s = available.get(80).toString();
System.out.println(" " + s);
}
任何帮助,不胜感激。
这里的问题是你已经添加了相同的ArrayList
possibleValues
81 次available
。 因此,available
列表包含对同一possibleValues
列表的 81 个引用。
对列表所做的任何更改都可以通过这 81 个引用中的任何一个可见。
如果您不希望更改对所有引用可见,只有一个,那么您需要制作列表的 81 个副本来添加:
for (int i = 0; i<=80; i++){
available.add(new ArrayList<Integer>(possibleValues));
}
这是因为您要向外部ArrayList
的每个索引添加相同的ArrayList
。对此ArrayList
的任何更改都将自动导致其他ArrayList
的更改。
嵌套循环以始终创建新ArrayList
或从现有循环构造新ArrayList
。
因为您要将值添加到同一个 ArrayList。您需要为 0 到 80 次迭代创建新的 Arraylist。
for(int j = 1; j<=9; j++){
possibleValues.add(j);// one ArrayList with values.
}
for (int i = 0; i<=80; i++){
available.add(possibleValues); //Here adding same Arraylist 80 times.
}
试试这个
ArrayList<List> available = new ArrayList<List>();
ArrayList<Integer> possibleValues = new ArrayList<Integer>();
for (int i = 0; i<=80; i++){
possibleValues = new ArrayList<Integer>();
for(int j = 1; j<=9; j++){
possibleValues.add(j);
}
available.add(possibleValues);
}
您正在添加相同的 ArrayList 81 次。ArrayList 是一种引用类型,因此对它的任何更改都会影响所有项目。它应该是:
available.add(new ArrayList(possibleValues));