【问题标题】:what is the cost of Collection.retainAll(Collection)Collection.retainAll(Collection) 的成本是多少
【发布时间】:2017-12-18 22:41:11
【问题描述】:

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

【问题讨论】:

  • 它使用来自AbstractCollection的实现。看起来它是线性的,因为它使用恒定时间 containsremove
  • @AndyTurner:谢谢

标签: java big-o linkedhashset


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 2010-09-20
      • 2013-02-11
      • 2010-09-06
      • 2012-10-01
      • 2010-11-15
      相关资源
      最近更新 更多