Использование API коллекций для перемешивания - PullRequest
6 голосов
/ 08 октября 2008

Я очень расстроен, потому что не могу понять, почему перетасовка коллекций не работает должным образом.

Допустим, я пытаюсь перемешать массив randomizer.

int[] randomizer = new int[] {200,300,212,111,6,2332}; 
Collections.shuffle(Arrays.asList(randomizer));

По какой-то причине элементы остаются отсортированными одинаково, независимо от того, вызываю ли я метод перемешивания или нет. Есть идеи?

Ответы [ 2 ]

18 голосов
/ 08 октября 2008

Arrays.asList нельзя использовать с массивами примитивов. Используйте это вместо:

Integer[] randomizer = new Integer[] {200,300,212,111,6,2332}; 
Collections.shuffle(Arrays.asList(randomizer));

То же правило применяется к большинству классов в структуре коллекций, поскольку вы не можете использовать примитивные типы.

Исходный код (с int[]) скомпилирован нормально, но не работал должным образом из-за поведения метода variadic asList: он просто создает одноэлементный список с массивом int его единственный член.

0 голосов
/ 08 октября 2008

Крис ответил правильно.

Как я уже сказал в комментарии к ответу Криса, ваш базовый массив изменится соответствующим образом, если массив не будет расти, а список создаст новый и скопирует в него элементы.

Возможно, вы захотите сохранить ссылку на список и выполнить итерацию по нему после вызова Arrays.asList, а не выполнять итерацию по массиву после этого, вместо этого выполните итерацию по списку.

...