如何打乱 ArrayList 的特定范围?

发布于 2024-11-29 17:22:13 字数 378 浏览 1 评论 0原文

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

In Java, I know that to shuffle an ArrayList, the method Collections.shuffle() exists, however this shuffles the entire list.

How can I write a method (or, can someone write it and show me it?) such as the following:

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦开始←不甜 2024-12-06 17:22:13

使用 列表。 subListCollections.shuffle,如下所示:(

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

注意,第二个索引为 subList exclusive,因此使用end+1 如果您想在随机播放中包含 end 索引。)

由于 List.subList 返回一个视图列表中,对子项进行的更改(通过 shuffle 方法)列表,也会影响原来的列表。

Use List.subList and Collections.shuffle, like this:

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

(Note that the second index to subList exclusive, so use end+1 if you want to include end index in the shuffle.)

Since List.subList returns a view of the list, changes made (by the shuffle method) to the sub list, will also affect the original list.

离线来电— 2024-12-06 17:22:13

是 - 使用 列表.sublist(start, end)Collections.shuffle() 即:

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

sublist 返回列表的视图,因此当您对其进行洗牌时,您会洗牌实际列表,但仅在开始和结束之间进行洗牌

Yes - use List.sublist(start, end) and Collections.shuffle() that, ie:

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

sublist returns a view of the list, so when you shuffle it, you shuffle the actual list but only between start and end

拧巴小姐 2024-12-06 17:22:13
Collections.shuffle(list.subList(start, end+1));

请注意 +1,因为 subList() 的结束索引是排他的。

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

Note the +1, because the end index of subList() is exclusive.

请恋爱 2024-12-06 17:22:13

很简单

public void shuffleArrayListInTheRange(int start, int end) {
    Collections.shuffle(list.subList(start, end));
}

It's simple

public void shuffleArrayListInTheRange(int start, int end) {
    Collections.shuffle(list.subList(start, end));
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文