ArrayList of Arraylist 一个删除函数会影响所有 Arraylists



我创建了一个包含 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));

最新更新