设置种子以确定性地在Java中对ArrayList进行洗牌

Ben*_*ynn 22 java random

我有一个整数列表(目前使用cern.colt.list.IntArrayList).我可以称之为"shuffle()"并随意改组.我希望能够重现一场洗牌.我可以通过设置种子来重现一系列随机数.在这种情况下,我似乎无法设置种子.我该怎么办?我对其他实现持开放态度.

aio*_*obe 41

这可以通过使用允许您提供支持Random实例的shuffle方法来实现Collections.shuffle(List<?> list, Random rnd):

例:

Collections.shuffle(yourList, new Random(somePredefinedSeed));
Run Code Online (Sandbox Code Playgroud)


Coo*_*ans 5

您可以使用public static void shuffle(List list, Random rnd)指定带有种子值的 Random 实例。对于Random(long seed)构造函数,您可以指定一个种子。

来自 Java 文档:

使用指定的随机源随机排列指定的列表。假设随机源是公平的,所有排列都以相同的可能性发生。