переставить / схватить элементы массива в Java - PullRequest
7 голосов
/ 22 февраля 2011

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

поэтому, если список {1,2,3,4,5,6}

вызов некоторого метода randomPermute () изменит его на нечто случайное, например

{1,3,2,6,5,4}

Ответы [ 3 ]

14 голосов
/ 22 февраля 2011

Collections.shuffle() делает работу:

public static void shuffle(List<?> list) - Произвольно переставляет указанный список, используя источник случайности по умолчанию. Все перестановки происходят с примерно равной вероятностью. http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util.List)

Например

    ArrayList<Integer>anArrayList = new ArrayList<Integer>();
    anArrayList.add(1);
    anArrayList.add(2);
    anArrayList.add(3);
    anArrayList.add(4);
    anArrayList.add(5);
    System.out.println(anArrayList);
    Collections.shuffle(anArrayList);
    System.out.println(anArrayList);

Пример вывода

[1, 2, 3, 4, 5]
[3, 5, 1, 2, 4]
0 голосов
/ 04 июля 2012

Простой пример:

ArrayList<MyObject> myObjects = new ArrayList<MyObject>();
//code -- load myObjects...

Collections.shuffle(myObjects);
0 голосов
/ 22 февраля 2011

Вы можете использовать Knuth shuffle : пройти через позиции с 1 по n-1, и для каждой позиции я поменять местами текущий элемент с произвольно выбранным элементом из позиций с i по n включительно.

Редактировать: Лучше ответ по самому лучшему.:)

...