リンクされたリストでは、各要素には次の要素へのポインタがあります。
head -> item1 -> item2 -> item3 -> etc.
にアクセスするにはitem3
、直接ジャンプできないため、item3に到達するまですべてのノードを先頭から歩く必要があることが明確にわかります。
したがって、各要素の値を出力したい場合は、次のように記述します。
for(int i = 0; i < 4; i++) {
System.out.println(list.get(i));
}
これはどうなりますか:
head -> print head
head -> item1 -> print item1
head -> item1 -> item2 -> print item2
head -> item1 -> item2 -> item3 print item3
これは、インデックスを作成するたびにリストの先頭から再開され、すべてのアイテムを通過するため、非常に非効率的です。これは、あなたの複雑さが事実上O(N^2)
リストをたどるだけであることを意味します!
代わりに私がこれをした場合:
for(String s: list) {
System.out.println(s);
}
次に何が起こるのですか:
head -> print head -> item1 -> print item1 -> item2 -> print item2 etc.
すべて単一のトラバーサル、つまりですO(N)
。
次に、の他の実装でList
あるに移動します。これはArrayList
、単純な配列によってサポートされています。その場合、配列は隣接しているため、任意の位置にランダムにジャンプできるため、上記のトラバーサルは両方とも同等です。