java - 在 Java 中没有重复且随机顺序的集合

标签 java list set duplicates shuffle

看起来我既不能使用 ArrayList 也不能​​使用 Set:

  • Set<> - 我可以使用集合避免重复,但没有随机选项//Collections.shuffle(List<?> list)

  • ArrayList<> - 我可以使用随机播放来随机化列表,但允许重复。

我可以使用 Set并将其转换为 ArrayList (或相反)以避免重复。或者,循环遍历集合以随机化项目。但我正在寻找更高效的方法。

最佳答案

您可以维护两个单独的集合,一个ArrayList 和一个HashSet,并拒绝插入HashSet 中存在的任何项目。

如果您关心封装,将两个集合包装在一个实现 List 的元对象中,并仔细记录重复元素的插入将被拒绝,即使如果List的总契约(Contract)没有这样规定。

谈到这个解决方案的成本,我相信如果与普通的 ArrayList 相比,就时间而言,成本绝对可以忽略不计:HashSet 上的大多数操作成本摊销 O(1),即查找和插入。另一方面,你的内存使用量将是两倍(或更多,取决于 HashSet 负载因子)。

关于java - 在 Java 中没有重复且随机顺序的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14893083/

相关文章:

c - 如何正确地从右向链表添加节点

Python - 检查作为字典一部分的列表中的值的便捷方法?

python - 确定集合列表是否共享数据

c# - 创建一个随机名称生成器。我该如何做到这一点?

python - 集合字典中的总和值

仅用一个整数表示一组整数的算法

java - 在 Itextpdf 中设置字体大小

java - 我如何在整个 Activity 中传递实例变量?

java - 将新对象添加到列表中; (for循环不能正常工作)

java - 如何设置按钮的 onClick,以便它根据星期几将我带到某个 Activity ?