重新排序List以在Java中随机化其顺序

Dar*_*ren 0 java random

我有一个包含N个元素的列表,我想随机化它的顺序.

优选地,具有最少的计算,并且能够耗尽存储器(复制总数).

到目前为止,我想出了:

  • 创建新的空列表,从原始列表中取出第一个元素,将其插入随机位置的新列表中,数量级似乎为O(N*N)但不使用额外的内存.
  • 创建一个新的ArrayList(容量N)(所以访问是O(1)),创建一个新的hashSet并插入所有可能的位置(N),取出原始List的第一个元素并将其插入新arrayList的随机位置,从hashSet中删除此位置,因为已经使用了ti.
  • 创建一个新的HashSet,将所有元素添加到此hashSet,并迭代该集合以创建一个新的List并希望hashSet中的顺序是随机的.

在我看来,最便宜的是第三种选择,但我不确定结果的随机性.有什么建议?

Jon*_*oni 7

打乱列表的最佳方法是使用标准库方法Collections.shuffle

List lst = getListFromSomewhere();
Collections.shuffle(lst);
Run Code Online (Sandbox Code Playgroud)

如果你想自己做,请阅读Fisher-Yates shuffle algorithm