As the title says, I was wondering what the time complexity of the contains() method of an ArrayList is.
it's O(n) for ArrayList
O(n)
The
size
,isEmpty
,get
,set
,iterator
, andlistIterator
operations run in constant time. Theadd
operation runs in amortized constant time, that is, adding n elements requires O(n) time. All of the other operations run in linear time (roughly speaking). The constant factor is low compared to that for the LinkedList implementation.
http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html
its O(n)
. contains(Object o)
is implemented on indexOf()
which takes O(n)
. So complexity of contains(Object o)
is defensively O(n)
Here are some other if you need:
add() - O(1)
add(index, element) – O(n)
get() – O(1)
set() – O(1)
remove() – (n)
indexOf()` – O(n)
If you look into the source code for ArrayList
and check its contains
method it looks as below:
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
contains
delegates the check to the indexOf
method. So, if we check the indexOf
implementation it is as follows:
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;
}
As it can be seen from the code, in order to find an index of a given element, one, in the worst case, must iterate through the whole array. As a size of the array grows and so does the search time by an element. Hence, the time complexity of contains
method is O(n)
, where n
is the number of elements in the list.