在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)
答案 0 :(得分:23)
使用List.subList
和Collections.shuffle
,如下所示:
Collections.shuffle(list.subList(start, end));
(请注意,subList
独占的第二个索引,如果要在随机播放中包含end+1
索引,请使用end
。)
由于List.subList
返回列表的视图,因此(通过随机方法)对子列表所做的更改也会影响原始列表。
答案 1 :(得分:7)
是 - 使用List.sublist(start, end)和Collections.shuffle(),即:
Collections.shuffle(list.sublist(start, end));
sublist
会返回列表的视图,因此当您对其进行随机播放时,您将对实际列表进行随机播放,但仅在开始和结束之间
答案 2 :(得分:2)
Collections.shuffle(list.subList(start, end+1));
请注意+1,因为subList()
的结束索引是独占的。
答案 3 :(得分:0)
很简单
public void shuffleArrayListInTheRange(int start, int end) {
Collections.shuffle(list.subList(start, end));
}