使用来源,卢克:)
编辑:正如 Bozho 指出的那样,您询问的是List.containsAll()哪些 overrides Collection.containsAll()。以下的闲话主要涉及后者:
大多数Collection类将使用from的实现containsAllAbstractCollection,其作用如下:
public boolean containsAll(Collection<?> c) {
for (Object e : c)
if (!contains(e))
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
不过,不能保证某些实现会完全不同——这可能会导致更好或更差的运行时行为。
上面的实现containsAll至少是 O(n),其中 n 是您传入的Collection参数中的项目数,加上所需的时间contains:
HashSet/HashMap这可能是 O(1) (最好的情况,没有冲突),所以整体运行时间containsAll仍然是 O(n)ArrayList,contains将采用 O(m),其中 m 是列表中的项目数(不是参数),因此总时间为containsAllO(n*m).equals(..)(注意:这是关于列表的,正如您在问题中指定的那样。其他集合的行为不同)所以它是 O(n*m),其中 n 和 m 是两个集合的大小。
public boolean containsAll(Collection<?> c) {
Iterator<?> e = c.iterator();
while (e.hasNext())
if (!contains(e.next()))
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14704 次 |
| 最近记录: |