[英]How can I shuffle a specific range of an 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)
使用List.subList
和Collections.shuffle
,像這樣:
Collections.shuffle(list.subList(start, end));
(注意subList
排他的第二個索引,所以如果你想在 shuffle 中包含end
索引,請使用end+1
。)
由於List.subList
返回列表的視圖,因此(通過 shuffle 方法)對子列表所做的更改也會影響原始列表。
是 - 使用List.sublist(start, end)和Collections.shuffle() ,即:
Collections.shuffle(list.sublist(start, end));
sublist
返回列表的視圖,所以當你打亂它時,你打亂了實際的列表,但只在開始和結束之間
Collections.shuffle(list.subList(start, end+1));
注意 +1,因為subList()
的結束索引是獨占的。
這很簡單
public void shuffleArrayListInTheRange(int start, int end) {
Collections.shuffle(list.subList(start, end));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.