リンクリストでは、各要素に次の要素へのポインタがあります。
head -> item1 -> item2 -> item3 -> etc.
にアクセスするitem3
には、直接ジャンプできないため、アイテム3に到達するまで、頭からすべてのノードを歩く必要があることがはっきりとわかります。
したがって、各要素の値を出力したい場合は、次のように記述します。
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.
すべてを1回の走査で、つまりO(N)
。
さて、他の実装に行きましょう。その実装はList
単純ArrayList
な配列に支えられています。その場合、配列は連続しているため、上記のトラバーサルは両方とも同等であり、任意の位置にランダムにジャンプできます。