[英]Time complexity of contains(Object o), in an ArrayList of Objects
O(n)
size
、isEmpty
、get
、set
、iterator
和listIterator
操作在恒定时间内运行。add
操作在分摊常数 time 内运行,即添加 n 个元素需要 O(n) 时间。 所有其他操作都在线性时间内运行(粗略地说)。 与 LinkedList 实现相比,常量因子较低。
http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html
ArrayList是 O(n)
如果您查看ArrayList
的源代码并检查其contains
方法,则如下所示:
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
contains
将检查委托给indexOf
方法。 因此,如果我们检查indexOf
实现,则如下所示:
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
从代码中可以看出,为了找到给定元素的索引,在最坏的情况下,必须遍历整个数组。 随着数组大小的增加,元素的搜索时间也会增加。 因此, contains
方法的时间复杂度为O(n)
,其中n
是列表中元素的数量。
它的O(n)
。 contains(Object o)
在indexOf()
上实现,它采用O(n)
。 所以contains(Object o)
复杂性是防御性的O(n)
如果您需要,这里还有其他一些:
add() - O(1)
add(index, element) – O(n)
get() – O(1)
set() – O(1)
remove() – (n)
indexOf()` – O(n)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.