Почему ArrayList.add() работает не так, как я этого ожидаю?
У меня есть следующий код на языке Java:
package task;
import java.util.List;
import java.util.ArrayList;
public class Loops implements GeneralLoops{
...
private ArrayList<Integer> currentStatus = new ArrayList<Integer>();
private ArrayList<List<Integer>> statusList = new ArrayList<List<Integer>>();
...
private void iterate(int index) {
for(int i = lowerLimits.get(index); i <= upperLimits.get(index); i++) {
currentStatus.set(index, i);
if(index < size-1)
iterate(index+1);
else {
statusList.add(currentStatus);
System.out.println(currentStatus);
}
}
currentStatus.set(index, lowerLimits.get(index));
}
...
public List<List<Integer>> getResult() {
iterate(0);
return statusList;
}
...
public static void main(String[] args) {
Loops loop = new Loops();
...
List<List<Integer>> result = loop.getResult();
System.out.println(result);
}
}
Метод getResult должен имитировать работу вложенных циклов и возвращать состояния итераторов на каждой итерации. Суть в том, что сам алгоритм реализован правильно, а вот запись в список statusList почему-то работает не так, как бы этого хотелось. Строчка System.out.println(currentStatus) выписывает каждое состояние правильно, но при добавлении этого состояния statusList он заменяется на {0, 0, 1}, в следствии чего последняя строка вывода выглядит примерно так: [[0, 0, 1], [0, 0, 1], ..., [0, 0, 1]]. Подскажите, почему метод add некорректно добавляет элемент в список? Заранее спасибо за ответы.
Ответы (1 шт):
почему метод add некорректно добавляет элемент в список
Метод add все делает правильно. Это Вы неправильно им пользуетесь. Вы все время добавляете ссылку на один и тот же объект - список, содержимое которого постоянно меняете. Поэтому все элементы statusList ссылаются на один список.