Collection.retainAll(Collection)的费用是多少

时间:2017-12-18 22:41:12

标签: java big-o linkedhashset

我想找到两个LinkedHashSet<String>之间的共同元素,主要是我编写了自己的函数,但成本是o(n ^ 2)。然后我找到了一个更好的retainAll() java内置函数的解决方案。 我想知道这个功能的成本是多少。 O(n)或o(n ^ 2)?

2 个答案:

答案 0 :(得分:2)

查看AbstractCollection中的实现,它迭代调用的集合的所有元素(即n),并且每个元素检查其他集合是否包含它(一个O( 1)在LinkedHashSet)的情况下的操作。

总之 - 这是一个O(n)操作,其中n是您调用方法的集合的大小。

答案 1 :(得分:1)

LinkedHashSet至少为O(N)。对于像树集一样的其他Collection,它将是O(NlogN),对于其余的,你将回到O(N ^ 2)。

注意这些度量取决于您传递给retainAll方法的集合。所以传递HashSet将是O(N),TreeSet将是O(NlogN),其他任何东西都会比O(NlogN)更差