Как я могу перетасовать определенный диапазон 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));
}