1
リンクリストindexof()がnullの "target"が渡されたときのパフォーマンス向上のために "header"エントリにnull要素があるという事実を利用しない理由を知りたい":LinkedListのindexOf()vs lastIndexOf()メソッドの最適化
public int indexOf(Object o) {
int index = 0;
if (o==null) {
// header.element guaranteed null, no chance of looping past header
for (Entry e = header.next; e.element != null; e = e.next) {
index++;
}
// if index < size, null was found, else we looped to header
return (index < size) ? index: -1;
} else {
for (Entry e = header.next; e != header; e = e.next) {
if (o.equals(e.element))
return index;
index++;
}
}
return -1;
}
我々はlastIndexOfでも(に似た変換を適用した場合)、それは非常にきれいな結果が得られます。
public int lastIndexOf(Object o) {
int index = size - 1;
if (o==null) {
for (Entry e = header.previous; e.element != null;
e = e.previous, index--);
} else {
for (Entry e = header.previous; e != header && !o.equals(e.element);
e = e.previous, index--);
}
return index;
}
は、それが意図的ですか?
このコードはどこから来たのですか?コメントによると、このリストのヘッダーは常にnull要素を持っています。どの最適化をご紹介しますか? –