java - Java 中 ContainsAll 的成本是多少?

标签 java arrays list interface

我在今天的一些编码过程中发现了 containsAll()(一个 List 接口(interface)方法),它看起来很漂亮。有谁知道这在性能/迭代方面的成本是多少?

documentation在这方面并没有提供太多。

最佳答案

使用来源,卢克 :)

编辑:正如 Bozho 指出的那样,您询问的是覆盖 Collection.containsAll()List.containsAll()。下面的漫谈主要与后者有关:

大多数 Collection 类将使用 implementation of containsAll from AbstractCollection ,它是这样的:

public boolean containsAll(Collection<?> c) {
    for (Object e : c)
        if (!contains(e))
            return false;
    return true;
}

但不能保证某些实现会完全不同 - 这可能会导致更好或更差的运行时行为。

containsAll 的上述实现将至少为 O(n),其中 n 是您传递的 Collection 参数 中的项目数in, plus 无论 contains 花费多少时间:

  • 对于 HashSet/HashMap 这可能是 O(1)(最好的情况,没有冲突),所以 containsAll 的整体运行时间仍然是 O(n)
  • 对于 ArrayListcontains 将占用 O(m),其中 m 是列表中的项目数(不是参数),因此 的总时间>containsAll 将是 O(n*m)

关于java - Java 中 ContainsAll 的成本是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10199772/

相关文章:

java - 字符串操作 - GA

c++ - 在分配给指向固定数组的指针期间没有指针衰减

带有 byte[] 参数的 NHibernate ISQLQuery 抛出错误

php - 蛋糕PHP : Update an Array object with equivalent column value in a table

java - 列表作为Java中的输出参数

list - 如何判断列表是否是无限的?

java - 无法从客户端应用程序获取 Bean

java - 根据相同的Id对arraylist中的数据进行分组

java - JMeter配置: Performance testing after Login

python - 根据用户输入制作二维列表