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 年以上が経過し、多くの構文が広く使用されるようになっています。
このセクションでは、コレクション出力の 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 インターフェイスの 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
Enumeration インターフェイスには、2 つの操作メソッドが定義されています:
次の要素の有無を判定:public boolean hasMoreElements()
現在の要素を取得:public E nextElement()
このインターフェイスは非常に古くから存在するため、初期の開発プロセスでは一部のメソッドが Enumeration 出力操作のみをサポートしていました。しかし、クラスメソッドの継続的な改善により、現在ではほとんどの操作が Iterator を使って直接実装できます。
foreach 出力
反復インターフェイスを使用した出力の他に、JDK 1.5 以降では、拡張 for 文を使用してコレクションの出力を実現できます。この出力形式は、配列の出力操作の形式と似ています。
例:foreach を使用した出力
この出力が登場した当初、多くの人が使用を推奨しませんでした。標準的なコレクション操作は依然として Iterator ベースだったためです。しかし、JDK 1.5 のリリースから既に 10 年以上が経過し、多くの構文が広く使用されるようになっています。
Related Articles
-
A detailed explanation of Hadoop core architecture HDFS
Knowledge Base Team
-
What Does IOT Mean
Knowledge Base Team
-
6 Optional Technologies for Data Storage
Knowledge Base Team
-
What Is Blockchain Technology
Knowledge Base Team
Explore More Special Offers
-
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
