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