Сохранение массива в ArrayList без выделения другого массива? - PullRequest
0 голосов
/ 01 сентября 2011

Рассмотрим этот пример:

int[] a = new int[] {0,0};
ArrayList<int[]> b = new ArrayList<int[]>();

b.add(a);
a[0] = 1;
a[1] = 1;
b.add(a);

b теперь {{1,1], [1,1]}. Как я могу гарантировать, что это будет {[0,0], [1,1]} без выделения другого массива ?

Ответы [ 4 ]

2 голосов
/ 01 сентября 2011

без выделения другого массива

Ну, вы хотите иметь два независимых набора значений одновременно.Для этого требуется два массива (или два списка и т. Д.).

2 голосов
/ 01 сентября 2011

Это просто добавляет ссылку. Так будет {[1,1],[1,1]}. Я не думаю, что есть другое решение, кроме выделения другого массива.

1 голос
/ 01 сентября 2011

Массив - это объект. Если вы измените массив, не имеет значения, сколько раз вы добавили его в список, toString покажет самое последнее состояние массива. ToString списка перебирает его элементы и вызывает toString для каждого из них. Я не знаю, что вы пытаетесь сделать, но, возможно, вам следует прочитать некоторые основные учебники.

0 голосов
/ 01 сентября 2011

Каждый элемент ArrayList<int[]> является ссылкой на массив целых чисел. Если вы добавите один и тот же массив дважды (как вы делаете), он будет повторен в списке. Изменение элемента массива int будет отражаться при каждом его появлении в ArrayList. Чтобы иметь разные массивы, вам нужно выделить отдельные массивы. Что-то вроде этого подойдет:

int[] a = new int[] {0,0};
ArrayList<int[]> b = new ArrayList<int[]>();

b.add(a.clone()); // add a distinct array
a[0] = 1;
a[1] = 1;
b.add(a);

Тогда содержимое b будет {[0,0], [1,1]}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...