1

我有 5 个具有数值的集合。我有兴趣找到所有 5 个集合的交集。

现在,我正在考虑以下问题

Do a Collections.sort() on all 5 sets

找到最短的集合并做一个

shortestSet.retainAll(otherSet); 

在所有其他集合上。

有没有更有效的方法来做到这一点?

4

3 回答 3

2

如果我们知道您在编写Collections.sort() 时正在根据集合的大小对集合列表进行排序,那么您的解决方案对我来说是正确的。基本原理是,如果我们要使用set1.retainAll(set2)(并且如果集合是HashSets),每个交叉点的运行时间应该与 的元素数量大致呈线性关系set1。所以从最小的开始是有意义的。

于 2013-04-26T18:34:05.277 回答
0

尝试使用

static <E> Sets.SetView<E> intersection(Set<E> set1, Set<?> set2) 

谷歌番石榴

于 2013-04-26T18:18:31.043 回答
0

你的解决方案很好。不过,在调用 retainAll 方法之前不需要对数字进行排序。

于 2013-04-26T18:14:56.193 回答