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