Как я могу перетасовать определенный диапазон ArrayList?
В Java я знаю, что для перетасовки массива ArrayList существует метод Collections.shuffle(), но это перемещает весь список.
Как я могу написать метод (или, может кто-нибудь написать его и показать мне?), например следующее:
private ArrayList<AnObject> list;
/**
* Shuffles the concents of the array list in the range [start, end], and
* does not do anything to the other indicies of the list.
*/
public void shuffleArrayListInTheRange(int start, int end)
Ответы
Ответ 1
Используйте List.subList
и Collections.shuffle
, например:
Collections.shuffle(list.subList(start, end));
(Обратите внимание, что второй индекс subList
эксклюзивный, поэтому используйте end+1
, если вы хотите включить end
index в случайном порядке.)
Так как List.subList
возвращает представление списка, изменения, внесенные (методом тасования) в дополнительный список, также влияют на исходный список.
Ответ 2
Да - используйте List.sublist(начало, конец) и Коллекции .shuffle(), которые:
Collections.shuffle(list.sublist(start, end));
sublist
возвращает представление списка, поэтому при его перетасовке вы перетасовываете фактический список, но только между началом и концом
Ответ 3
Collections.shuffle(list.subList(start, end+1));
Обратите внимание на +1, потому что конечный индекс subList()
является исключительным.
Ответ 4
Это просто
public void shuffleArrayListInTheRange(int start, int end) {
Collections.shuffle(list.subList(start, end));
}