Использование API коллекций для перемешивания
-
05-07-2019 - |
Вопрос
Я очень расстроен, потому что не могу понять, почему перетасовка коллекций не работает должным образом.
Допустим, я пытаюсь перемешать массив randomizer
. Р>
int[] randomizer = new int[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
По какой-то причине элементы остаются отсортированными одинаково, независимо от того, вызываю ли я метод shuffle или нет. Есть идеи? Р>
Решение
Arrays.asList
нельзя использовать с массивами примитивов. Используйте это вместо:
Integer[] randomizer = new Integer[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
То же правило применяется к большинству классов в структуре коллекций, поскольку вы не можете использовать примитивные типы.
Исходный код (с int []
) скомпилирован нормально, но не сработал, как предполагалось, из-за поведения метода с переменным числом asList
: он просто создает одноэлементный список с массивом int
в качестве единственного члена.
Другие советы
Крис ответил правильно.
Как я уже сказал в комментарии к ответу Криса, ваш базовый массив изменится соответствующим образом, если массив не должен увеличиваться, а список создает новый и копирует в него элементы.
Возможно, вы захотите сохранить ссылку на список и выполнить итерацию по ней после вызова Arrays.asList, а не выполнять итерацию по массиву после этого, вместо этого выполните итерацию по списку.