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

Java 如何从列表中选择随机元素?,java,Java,我正在使用java.util.LinkedList 有什么方法可以帮助我实现这一点吗?如果您只需要一个元素,您可以使用该类生成(伪)随机值(如您在问题中所写): 请记住LinkedList.get(index)是一个O(n)操作,如注释中所述,最好使用ArrayList 如果要洗牌整个阵列,可以使用如下api: Collections.shuffle(list); 如果您只需要一个元素,则可以使用该类生成(伪)随机值(如您在问题中所述): 请记住LinkedList.get(index)是一个

我正在使用
java.util.LinkedList


有什么方法可以帮助我实现这一点吗?

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

请记住
LinkedList.get(index)
是一个O(n)操作,如注释中所述,最好使用
ArrayList

如果要洗牌整个阵列,可以使用如下api:

Collections.shuffle(list);

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

请记住
LinkedList.get(index)
是一个O(n)操作,如注释中所述,最好使用
ArrayList

如果要洗牌整个阵列,可以使用如下api:

Collections.shuffle(list);

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

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

您也可以使用
集合对
列表进行无序排列。无序排列
并每次拾取第一个元素,尽管这可能在计算方面有点昂贵。这是您应该注意的另一个技巧。:-)

final List lst=Arrays.asList(“a”、“b”、“c”);
收藏。洗牌(lst);
最终字符串rndStr=lst.get(0);

您也可以使用
集合来洗牌
列表。洗牌
并每次选择第一个元素,尽管这在计算方面可能有点昂贵。这是您应该注意的另一个技巧。:-)

final List lst=Arrays.asList(“a”、“b”、“c”);
收藏。洗牌(lst);
最终字符串rndStr=lst.get(0);

如果您真的只需要一个元素,请使用dacwe的解决方案。如果您需要几个值(例如,在模拟纸牌游戏、宾果游戏等时),可以使用
java.util.Collections.shuffle(列表),并调用
列表。删除(0)代码。

如果您确实只需要一个元素,请使用dacwe的解决方案。如果您需要几个值(例如,在模拟纸牌游戏、宾果游戏等时),可以使用
java.util.Collections.shuffle(列表),并调用
列表。删除(0)针对您需要的每个元素。

虽然您可以这样做(如果您需要多个元素,这是一种有用的技术),但与只查找元素相比,这是非常昂贵的。同意,因此我在我的帖子中提到,这种技术在计算上是昂贵的。尽管您可以这样做(如果你需要不止一个元素,这是一种有用的技术),与只查找一个元素相比,这是非常昂贵的。同意,因此我在我的帖子中提到,这种技术在计算上是昂贵的。
ArrayList
可能是一个更好的选择。从
LinkedList
获取一个随机元素是O(N)成本(因为您必须从第一个元素遍历到所选元素)。
ArrayList
是O(1)来访问特定元素。是的..我的代码现在比以前运行快80%左右。谢谢!!
ArrayList
可能是更好的选择。从
LinkedList
获取随机元素的成本为O(N)(因为您必须从第一个元素遍历到所选的元素。
ArrayList
是访问特定元素的O(1)。是的。。我的代码现在比以前运行快80%左右。谢谢!!这只是获得了一个随机索引。使用
list.get(randomInt)
获得实际值(正如所有其他答案所述)。同意。问题是选择一个随机元素,所以我停在那里。感谢您的澄清。这只是获得一个随机索引。使用
list.get(randomInt)
获得实际值(正如所有其他答案所述).同意。问题是选择一个随机元素,所以我停在那里。谢谢你的澄清。
 int len = list.size(); 
 Random randomGenerator = new Random();
 int randomInt = randomGenerator.nextInt(len);
final List<String> lst = Arrays.asList("a", "b", "c");
Collections.shuffle(lst);
final String rndStr = lst.get(0);