Collections.shuffle()
向后遍历Collection
的每个索引,然后将其与随机索引包括或之前]交换。我想知道为什么,所以我试图做同样的事情,但与交换任何在Collection
随机指标
这是Collections.shuffle()代码的改组部分:
for (int i=size; i>1; i--) swap(arr, i-1, rnd.nextInt(i));
这里是我的算法:
Random r = new Random(); for (int i = 0; i < a.size(); i++) { int index = r.nextInt(a.size()); int temp = a.get(i); a.set(i, a.get(index)); a.set(index, temp); }
我发现
Collections.shuffle()
被更均匀地分布比我的代码,当我跑都在同一ArrayList
一百万次。此外,在运行我的代码时:
[0,1,2,3,4]
似乎以下排列最经常一致地出现:
[1,0,3,4,2][1,2,3,4,0][1,2,0,4,3][0,2,3,4,1][1,2,3,0,4]
可能有人请解释为什么?
Collections.shuffle()经过一个Collection向后的每个索引,然后与包括或之前随机索引交换它。我想知道为什么,所以我试图做同样的事情,但交换...
Collections.Shuffle()
执行Fisher-Yates随机播放
这是费舍尔·耶茨的另一种解释。