イテレータを使用しないと次の要素にアクセスできないのに、Java にリンク リストがあるのはなぜですか?
5 に答える
「リストをイテレータに変換する」のではなく、「リストの上にイテレータを取得する」のです。イテレータメカニズムは、時間内に操作するのがはるかに簡単であることがわかります。
LinkedList
List
は、の相対的なインターフェイスの実装ですCollection
。リンクリストは概念そのものであり、リストのすべての要素が次の要素と前の要素を知っているノードに含まれています。これは、要素の挿入順序を維持するために行われます。
これは、別の一般的な実装では発生しませんArrayList
。各要素が基になる配列に割り当てられ、この場合、順序は保証されません。
Aniterator
は、リストを反復処理する際にリストを管理するという大きな利点があり(たとえば、remove
反復子のメソッドがで終わらないConcurrentModificationException
)、特定のリストとは関係がない、リストを反復処理する複数の方法の1つです。トラバースされたコレクションの実装。これはコレクションではなく、ループに適した方法で「管理」するだけです。
次の要素だけが必要な場合は、次の要素を使用できます。
list.get(Int index+1);
そして、インデックスをに設定します
index = list.indexOf(<The current object your are in>);
現在どのオブジェクトにいるかについての知識がない場合は、イテレータを使用する必要があります。これはかなり簡単で非常に高速です。
それぞれにいつでも使用できます。
for(List l : o)
コードを特定の実装に関連させないようにしたいからです。「次の」関数があり、後でArrayList実装に変更したい場合は、大きな問題が発生します...
そして、より多くの説明:
インターフェースLinkedList
の単なる別の実装です。List
との主な違いはArrayList
、配列が次のオブジェクトへの参照を保持するLinkedList
ときに、拡張可能な配列を使用してリストを保持することです。LinkedList
インデックス内のオブジェクトを取得する関数はまだありget(index)
ますが、効率的ではありません(O(n))。
LinkedListは主に、ArrayListよりも効率的な実行時間を短縮するために使用されます。
イテレータは、単にリストをトラバースする方法です。データ構造を持つ理由はLinkedList
、特定の操作の効率に関連しています。
aと。のどちらを選択するかについての適切な説明については、この回答を参照してください。LinkedList
ArrayList