Перемешать массив в Java - PullRequest
1 голос
/ 14 ноября 2011

Я хочу перетасовать массив в java, но не изменять исходный список, только перемешать временный список.

Я написал что-то вроде этого.

    ArrayList<TristateCheckBox> tempList = buttons; 
Collections.shuffle(tempList);  

Но это не тасует, только tempList также меняет список кнопок.

Ответы [ 3 ]

8 голосов
/ 14 ноября 2011

Вам необходимо взять копию Списка, а не просто копию ссылки на список.

List<TristateCheckBox> tempList = new ArrayList<TristateCheckBox>(buttons); 
Collections.shuffle(tempList);  
2 голосов
/ 14 ноября 2011

tempList - указатель на объект кнопок.TempList и кнопки указывают на одно и то же место в памяти.Вы должны фактически скопировать данные, чтобы сохранить порядок в исходном списке.Посмотрите на массивы: http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html для метода, который копирует массив.

0 голосов
/ 14 ноября 2011

Вы просто присваиваете тот же самый экземпляр buttons ArrayList другой переменной.tempList в итоге будет ссылаться на тот же ArrayList.

Попробуйте вместо этого:

List<TristateCheckBox> tempList = new ArrayList<TristateCheckBox>(buttons);
Collections.shuffle(tempList);

Что конструктор ArrayList, принимающий другую коллекцию, будет включать каждую запись данной коллекции в новый список,Не копии записей, просто те же ссылки в другом списке.

...