重新排序列表以在 Java 中随机化其顺序 [英] Reorder a List to randomize its order in Java

查看:34
本文介绍了重新排序列表以在 Java 中随机化其顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a list with N elements, I want to randomize its order.

最好是计算最少,并且能够使用内存(复制总数).

Preferably with the least computation, and being able to use up memory (duplicating the total).

到目前为止,我想出了:

So far I've come up with:

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

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

Seems to me the least expensive is the third option, but i'm unsure of how random the result would be. Any suggestions?

推荐答案

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

The best way to shuffle a list is using the standard library method Collections.shuffle.

List lst = getListFromSomewhere();
Collections.shuffle(lst);

如果您想自己动手,请阅读 Fisher-Yates shuffle算法.

If you want to do it yourself, read up on the Fisher-Yates shuffle algorithm.

这篇关于重新排序列表以在 Java 中随机化其顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆