首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中从列表中选取多个随机元素

在Java中从列表中选取多个随机元素
EN

Stack Overflow用户
提问于 2011-12-05 05:31:21
回答 8查看 26.7K关注 0票数 24

所以说我有

代码语言:javascript
复制
List<String> teamList = new LinkedList<String>()
teamList.add("team1");
teamList.add("team2");
teamList.add("team3");
teamList.add("team4");
teamList.add("team5");
teamList.add("team6");

有没有简单的方法来挑选..。假设这个列表中的6个元素中有3个元素是随机的,而不是两次(或多次)选择相同的元素?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-12-05 05:39:26

试试这个:

代码语言:javascript
复制
public static List<String> pickNRandom(List<String> lst, int n) {
    List<String> copy = new ArrayList<String>(lst);
    Collections.shuffle(copy);
    return n > copy.size() ? copy.subList(0, copy.size()) : copy.subList(0, n);
}

我假设在输入列表中没有重复的元素,而且我采取了预防措施,为了保持原始列表不受干扰,我会混洗一份副本。像这样使用它:

代码语言:javascript
复制
List<String> randomPicks = pickNRandom(teamList, 3);
票数 62
EN

Stack Overflow用户

发布于 2011-12-05 05:34:13

创建一组int,并在循环中将介于0和list长度减1之间的随机数放入其中,而集合的大小不等于期望的随机元素数。浏览集合,并选择集合中的数字所指示的列表元素。这种方式可以保持你的原始列表不变。

票数 6
EN

Stack Overflow用户

发布于 2011-12-05 05:39:08

shuffle方法是最常用的方法:在此之后,前K个元素就是您所需要的。

如果K比列表的长度小得多,你可能想要更快。在这种情况下,遍历列表,随机地将当前元素与其自身或其后的任何元素进行交换。在第K个元素之后,停止并返回K前缀:它已经完全混洗过了,您不需要关心列表的其余部分。

(显然,您希望在这里使用ArrayList )

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8378752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档