1

我创建了一个包含 80 个 Arraylist 的 ArrayList。里面的每个 ArrayList 的值都是 1-9。

但是,当我从其中一个 Arraylist 中删除一个值时,它会在所有这些中删除。

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

}

任何帮助表示赞赏。

4

4 回答 4

6

这里的问题是您已将相同的内容添加ArrayList possibleValuesavailable81 次。因此,该available列表包含对同一possibleValues列表的 81 个引用。

对列表所做的任何更改都可以通过这 81 个参考中的任何一个看到。

如果您不希望更改对所有引用可见,只有一个,那么您需要制作列表的 81 个副本以添加:

for (int i = 0; i<=80; i++){
    available.add(new ArrayList<Integer>(possibleValues));  
}
于 2013-10-25T16:13:09.557 回答
1

那是因为您将相同的内容添加ArrayList到 external 的每个索引中ArrayList。对 this 的任何更改ArrayList都会自动导致 other 的更改ArrayList

嵌套您的循环以始终创建一个新循环或从现有循环ArrayList构建一个新循环。ArrayList

于 2013-10-25T16:12:46.403 回答
1

因为您要将值添加到相同的 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);  
  }
于 2013-10-25T16:13:25.687 回答
0

您正在添加相同的 ArrayList 81 次。ArrayList 是一种引用类型,因此对它的任何更改都会影响所有项目。它应该是:

可用的.add(new ArrayList(possibleValues));

于 2013-10-25T16:20:17.827 回答