我有 5 个具有数值的集合。我有兴趣找到所有 5 个集合的交集。
现在,我正在考虑以下问题
Do a Collections.sort() on all 5 sets
找到最短的集合并做一个
shortestSet.retainAll(otherSet);
在所有其他集合上。
有没有更有效的方法来做到这一点?
如果我们知道您在编写Collections.sort()
时正在根据集合的大小对集合列表进行排序,那么您的解决方案对我来说是正确的。基本原理是,如果我们要使用set1.retainAll(set2)
(并且如果集合是HashSet
s),每个交叉点的运行时间应该与 的元素数量大致呈线性关系set1
。所以从最小的开始是有意义的。
你的解决方案很好。不过,在调用 retainAll 方法之前不需要对数字进行排序。