阅读关于费舍尔 - 耶茨洗牌最后一段的维基百科页面是:
最后,需要注意的是,即使生成完美的随机数,也可能通过不正确地使用发生器将缺陷引入实现中.例如,假设Java实现为每次调用shuffler创建一个新生成器,而不传递构造函数参数.然后,生成器将被语言的时间默认播种(在Java的情况下为System.currentTimeMillis()).因此,如果两个调用者在小于时钟粒度的时间跨度内调用shuffler(在Java的情况下为1毫秒),则他们创建的生成器将是相同的,并且(对于相同长度的数组)相同的排列将是生成.如果快速连续多次调用洗牌器,几乎肯定会发生这种情况,在这种情况下会导致极不均匀的分布; 它也可以应用于来自不同线程的独立调用.更强大的Java实现将使用在shuffler函数之外定义的生成器的单个静态实例.
我理解除了本段最后一句之外的所有内容.当作者说:
更强大的Java实现将使用在shuffler函数之外定义的生成器的单个静态实例.
mat*_*hon 11
这意味着你有一个像这样的静态函数:
class RandomUtil {
public static final Random rand = new Random();
}
Run Code Online (Sandbox Code Playgroud)
然后,您使用此rand生成器RandomUtil.rand.nextInt()
生成所有随机数.您只使用这一个实例,并确保不会出现wiki中提到的问题.