看起来我既不能使用 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/