Использование API коллекций для перемешивания

StackOverflow https://stackoverflow.com/questions/180979

  •  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, а не выполнять итерацию по массиву после этого, вместо этого выполните итерацию по списку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top