我有5个具有数值的集合。我对找出这5个集合的交点很感兴趣。
现在,我在想下面这些
Do a Collections.sort() on all 5 sets
找到最短集合并做一个
shortestSet.retainAll(otherSet);
在所有其他集合上。
有没有更有效的方法?
你的解决方案对我来说是正确的,如果我们理解当你写Collections.sort()
时,你是根据集合的大小对集合列表进行排序。基本原理是,如果我们要使用set1.retainAll(set2)
(如果集合是HashSet
),每个交集运行时间应该与set1
元素的数量大致线性。所以从最小的开始是有意义的
你的解决方案很好。但是,在调用retainAll方法之前不需要对数字进行排序。
尝试使用
static <E> Sets.SetView<E> intersection(Set<E> set1, Set<?> set2)
In Google Guava