6

良い一日、

誰かがこの投稿の下部で言われたことを確認できますかjava-リンクリストの反復この投稿では、 for(char c:linkedlistofchars)構文を 使用でき、それでもO(n)になると述べています。このようなリストにアクセスすると思います...

a b c d e f

実際には、次のように、forループのすべての反復中にリンクリストの最初から開始します...

a ab abc abcde abcdef 

アクセス時間がO(n)にならないようにします。

それはどの程度正確に機能しますか?配列と配列演算子では意味がありますが、Java構文は、Javaのforeachループを使用してリンクリストを反復処理する方法をどのように知っていますか?

LinkedListデータ構造は単なる追加のライブラリであり、コア言語構文の一部ではないと思いました。(私はLinkedListクラスがJavaの標準であることを認識しています)

私の懸念を十分に明確に説明したことを願っています....ありがとう

4

2 に答える 2

11

まず、実装するクラスのインスタンスはすべてIterableforeachループで使用できます。その理由は、コンパイル後、for (Suit suit : suits)実際には。になるためですfor (Iterator i = suits.iterator(); i.hasNext(); )。詳細については、この説明を参照してください。

また、コレクションは、データ構造に固有の最適化されたイテレーターを実装します。具体的にLinkedListは、イテレータは最後に返されたオブジェクトへのポインタを保持して、一定の時間next()previous()操作を可能にします。したがって、foreach-loopを使用してリンクリストを反復処理すると、O(n)時間の複雑さが生じます。詳細については、ソースコードを参照してください。

于 2012-06-15T01:52:04.987 に答える
2

このリンクのコード例は、違いを示しています。そのリンクのOPは間違っています。呼び出しlist.get(i)は毎回リストの先頭から始まり、にi達するまでカウントされますが、aiterator.next()はリスト内の場所を保存するため、呼び出されるたびに次の値を読み取るだけで済みます。 、0からnまでのすべての値ではありません。

于 2012-06-15T01:37:51.463 に答える