Collection output takes you to learn advanced features of Java language

【プログラムの目標】

このセクションでは、コレクション出力の 4 つの形式を習得する必要があります。Iterator 反復出力、ListIterator 双方向反復出力、Enumeration 列挙出力、foreach 出力です。

コレクション出力
コレクション出力では、JDK 1.8 以降、Iterable インターフェイスに forEach() メソッドが既に提供されていますが、このメソッドは従来のコレクション出力の概念とは異なり、実際の開発で使用されることは稀です。コレクション操作における出力には、次の 4 つの形式があります。Iterator 反復出力(95%)、ListIterator 双方向反復出力(0.1%)、Enumeration 列挙出力(4.9%)、foreach 出力(Iterator と同等)です。

Iterator 反復出力
Collection インターフェイスの継承関係から、JDK 1.5 以降、Iterable 親インターフェイスを継承しており、このインターフェイスに iterator() 操作メソッドが定義されていることがわかります。このメソッドを通じて Iterator インターフェイスオブジェクトを取得できます(JDK 1.5 より前は、このメソッドは Collection インターフェイスに直接定義されていました)。

Iterator インターフェイスオブジェクトの取得:public Iterator iterator();

ただし、Iterator インターフェイスの remove() メソッドの使用には特に注意が必要です(必要がない限り使用しないでください)。実際、Collection インターフェイスにもデータ削除操作メソッドが定義されていますが、反復出力中に Collection の remove() メソッドを使用すると、反復処理が失敗します。
例:Collection の remove() メソッドを使用して削除する

この場合、プログラムの実行時にエラーは発生せず、元のコレクション内のデータを正常に削除できます。

面接質問:

Collection.remove() と Iterator.remove() の違いを説明してください。

反復出力の実行時に Collection.remove() を使用すると、同時更新例外が発生し、プログラムの削除処理でエラーが生じます。この場合、Iterator インターフェイスの remove() メソッドのみが正常な削除処理を実現できます。

ListIterator 双方向反復出力

Iterator を使用した反復出力には、前から後ろへの一方向出力のみという特徴があります。双方向の反復処理が必要な場合は、Iterator のサブインターフェイスである ListIterator インターフェイスに依存して実装する必要があります。注意点として、ListIterator インターフェイスオブジェクトを取得するための処理メソッドは Collection インターフェイスには定義されておらず、List サブインターフェイスに定義されています。つまり、この出力インターフェイスは List コレクション専用に用意されたものです。

ListIterator インターフェイスには、以下の操作メソッドが定義されています:

前の要素の有無を判定:public boolean hasPrevious()
現在の要素を取得:public E previous()

例:双方向反復の実装

後ろから前への走査を実装する場合、まず前から後ろへの走査処理を実装する必要があります。

Enumeration 出力

Enumeration は JDK 1.0 から使用されている出力インターフェイスです。この出力インターフェイスは主に Vector クラスにサービスを提供するためのものです。JDK の後続の開発においても、Enumeration は引き続き Vector クラス専用のため、Enumeration インターフェイスオブジェクトを取得するには、Vector クラスが提供するメソッドに依存する必要があります:

Enumeration の取得:public Enumeration elements()
Enumeration インターフェイスには、2 つの操作メソッドが定義されています:
次の要素の有無を判定:public boolean hasMoreElements()
現在の要素を取得:public E nextElement()

このインターフェイスは非常に古くから存在するため、初期の開発プロセスでは一部のメソッドが Enumeration 出力操作のみをサポートしていました。しかし、クラスメソッドの継続的な改善により、現在ではほとんどの操作が Iterator を使って直接実装できます。

foreach 出力

反復インターフェイスを使用した出力の他に、JDK 1.5 以降では、拡張 for 文を使用してコレクションの出力を実現できます。この出力形式は、配列の出力操作の形式と似ています。

例:foreach を使用した出力

この出力が登場した当初、多くの人が使用を推奨しませんでした。標準的なコレクション操作は依然として Iterator ベースだったためです。しかし、JDK 1.5 のリリースから既に 10 年以上が経過し、多くの構文が広く使用されるようになっています。

Related Articles

Explore More Special Offers

  1. Short Message Service(SMS) & Mail Service

    50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00

phone お問い合わせ
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.