如何更改特定范围的ArrayList?

时间:2011-08-16 14:28:51

标签: java collections 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)

4 个答案:

答案 0 :(得分:23)

使用List.subListCollections.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));
}