Collections.shuffle (Список списка) - PullRequest
6 голосов
/ 31 мая 2010

Что побудит использовать этот метод?

Обновление : Теперь я вижу смысл. Мне нравится причина, по которой Ури говорит: «Перемешивание - не тривиальный алгоритм». Это совершенно верно.

Ответы [ 4 ]

12 голосов
/ 31 мая 2010

Может быть много причин, по которым можно произвольно перемешать упорядоченную последовательность элементов. Например, колода карт.

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

Относительно того, почему список - очевидно, это должна быть упорядоченная коллекция, а не какая-либо общая коллекция. Только список и его подтипы гарантированно будут заказаны. Класс Collections не предоставляет операций для массивов, но вы можете (и, вероятно, должны это сделать для повышения производительности) передать ArrayList этому методу.

5 голосов
/ 31 мая 2010

Хм, если у вас есть коллекция, и вы хотите перетасовать ее ...

Наиболее очевидный пример - карточная игра, в которой у вас есть объекты, представляющие отдельные карты, и коллекция, представляющая колоду, которую вы хотите перемешать.

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

1 голос
/ 31 мая 2010

Некоторые идеи, как вы могли бы использовать этот метод:

  • Перемешать карты в игре
  • Рандомизировать массив в тестовом случае для алгоритма сортировки
  • Перемешивание тестовых наборов в вашем наборе тестов, чтобы убедиться, что они не зависят друг от друга
  • Если вы попытаетесь решить NP-полную задачу, например, коммивояжером, один из подходов состоит в том, чтобы взять ввод, перетасовать его несколько раз и затем использовать результат с наименьшей длиной. Это дает вам решение, которое выполняется за время O (N) (где N - количество узлов).
1 голос
/ 31 мая 2010

Ну, представьте, что вы моделируете колоду карт. Shuffle будет одной из первых написанных вами функций.

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

...