求5个集合交点的有效方法



我有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

最新更新