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 は、キーのハッシュを使用してそのハッシュ (高速) を持つすべてのキーを取得し、それらのキーに対してのみ equals を使用するため、改善されています。しかし、containsValue() は for を使用して値を調べます。
TreeMap.containsKey は、コンパレーターを使用して情報に基づいた検索を行い、キーをより速く見つけるように見えるので、さらに優れています。しかし、値が見つかるまで、containsValue は 3 つ全体を通過しているようです。
全体として、毎回ループを実行するよりも書きやすいので、メソッドを使用する必要があると思います:)。