Как я могу перетасовать определенный диапазон ArrayList? - PullRequest
12 голосов
/ 16 августа 2011

В 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)

Ответы [ 4 ]

23 голосов
/ 16 августа 2011

Используйте List.subList и Collections.shuffle, например:

Collections.shuffle(list.subList(start, end));

(Обратите внимание, что второй индекс для subList эксклюзив , поэтому используйте end+1, если вы хотите включить end index в случайное перемешивание.)

Поскольку List.subList возвращает представление списка, изменения, внесенные (методом случайного выбора) в подсписок, также влияют на исходный список.

7 голосов
/ 16 августа 2011

Да - используйте List.sublist (начало, конец) и Collections.shuffle () , то есть:

Collections.shuffle(list.sublist(start, end));

sublist возвращает просмотр списка, поэтому, когда вы перетасовываете его, вы перетасовываете фактический список, но только между началом и концом

2 голосов
/ 16 августа 2011
Collections.shuffle(list.subList(start, end+1));

Обратите внимание на +1, потому что конечный индекс subList() является эксклюзивным.

0 голосов
/ 16 августа 2011

Все просто

public void shuffleArrayListInTheRange(int start, int end) {
    Collections.shuffle(list.subList(start, end));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...