ArrayList.contains делает
return indexOf(o) >= 0;
, где
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;
}
Это похоже на LinkedList, только он использует .next () для итерации по элементам, так что особой разницы нет.
public int indexOf(Object o) {
int index = 0;
if (o==null) {
for (Entry e = header.next; e != header; e = e.next) {
if (e.element==null)
return index;
index++;
}
} else {
for (Entry e = header.next; e != header; e = e.next) {
if (o.equals(e.element))
return index;
index++;
}
}
return -1;
}
HashMap.containKey использует хеш ключа для извлечения всех ключей с этим хешем (что быстро), а затем использует равные только для этих ключей, так что есть улучшение; но containsValue () проходит через значения с for.
TreeMap.containsKey, кажется, выполняет информированный поиск, используя компаратор, чтобы найти Ключ быстрее, так что еще лучше; но свойство hasValue по-прежнему проходит через все три, пока не найдет значение.
В целом, я думаю, вы должны использовать методы, так как их легче писать, чем делать цикл каждый раз:).