如何从列表中选择随机元素?

时间:2011-07-27 09:56:18

标签: java

我正在使用java.util.LinkedList

有什么方法可以帮助我吗?

5 个答案:

答案 0 :(得分:8)

 int len = list.size(); 
 Random randomGenerator = new Random();
 int randomInt = randomGenerator.nextInt(len);

答案 1 :(得分:4)

如果您只需要一个元素,则可以使用Random类生成(伪)随机值(如您在问题中所写):

E element = list.get(new Random().nextInt(list.size()));

请记住LinkedList.get(index)是O(n)操作,如评论中所述,为此目的最好使用ArrayList

如果你想改组整个阵列,你可以像这样使用Collections api:

Collections.shuffle(list);

答案 2 :(得分:3)

您也可以使用List随机播放Collections.shuffle并每次都选择第一个元素,尽管这可能是一个有点昂贵的计算方法。你应该注意的另一个技巧。 : - )

final List<String> lst = Arrays.asList("a", "b", "c");
Collections.shuffle(lst);
final String rndStr = lst.get(0);

答案 3 :(得分:0)

使用size()获取列表长度,创建介于0和size-1之间的随机数,并使用get(index)检索具有该索引的元素。

答案 4 :(得分:0)

如果你真的只需要一个元素,请使用dacwe的解决方案。如果您需要多个值(例如,在模拟纸牌游戏,宾果游戏等时),您可以使用java.util.Collections.shuffle(list);,并为您需要的每个元素调用list.remove(0);