如何随机排列数组列表的特定范围?

2022-09-03 17:54:02

在Java中,我知道要洗牌ArrayList,方法Collesions.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.subListCollections.shuffle,如下所示:

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

(请注意,第二个索引为独占索引,因此,如果要在随机播放中包含索引,请使用。subListend+1end

由于返回列表的视图,因此对子列表所做的更改(通过 shuffle 方法)也会影响原始列表。List.subList


答案 2

是的 - 使用List.sublist(start,end)Collections.shuffle(),即:

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

sublist返回列表的视图,因此当您随机排列它时,您将随机排列实际列表,但仅在开始和结束之间