ホームページ  >  記事  >  Java  >  Javaのイテレータの詳しい説明

Javaのイテレータの詳しい説明

黄舟
黄舟オリジナル
2017-09-25 10:16:181352ブラウズ

Java はイテレーターを使用して、さまざまなコンテナーに共通の操作インターフェイスを提供します。この記事では、Java でのイテレーターの使用分析を共有します。必要な方は参考にしてください。

イテレーターとは何ですか

Java では、多くのデータ コンテナーがあり、その操作には多くの共通点があります。 Java はイテレータを使用して、さまざまなコンテナに共通の操作インターフェイスを提供します。これにより、コンテナのトラバーサル操作がその特定の基礎となる実装から分離され、分離効果が得られます。

Iterator インターフェースには 3 つのメソッドが定義されています:

Java コレクション クラスの Map インターフェースの下にある関連クラスは、Collection インターフェースの関連クラスのように get() メソッドを実装しません。 get() メソッドを直接使用してオブジェクト内のデータを取得する方法はありませんが、Java 自体がデータを走査する別の方法、つまり Iterator を使用して走査および走査を行うことができます。読み取りデータ、それは本質的にメソッドではなく、単なる設計パターンであり、オブジェクト、つまり「軽量」オブジェクトです。以下に、さまざまなインターフェイスでの Iterator の使用方法を説明します。

(1) Collection インターフェイスでの Iterator の使用。

Collection インターフェースの関連クラスは get() メソッドを実装していますが、それらに対して Iterator を使用するのが適切であることに変わりはなく、Collection で Iterator を使用する 2 つの方法について説明します。 while() ループと連携してトラバーサル出力を実現します:

 ArrayList list = new ArrayList();
 //此处省略list的具体赋值过程
 Iterator it = list.iterator();
     while(it.hasNext()){
       System.out.println(it.next());
     }

while() の判定条件 it.hasNext() は、次の要素があるかどうかを判定するために使用されます。ループしてステートメントを出力します。 it.next() は、「ポインター」を 1 つ前の位置に戻すだけでなく、出力のために現在の要素を返すこともできます。

2. for() ループを使用してトラバーサル出力を実現します:

 ArrayList list = new ArrayList();
 //此处省略list的赋值过程
 for(Iterator it = list.iterator();it.hasNext();){
       System.out.println(it.next());
 }

for() ループでの使用原理は while() と同じなので、ここでは詳しく説明しません。

ただし、上記は一般的な for() ループで使用されており、for each ループで Iterator を置き換えることもできます。これは、for each 自体がイテレーターと同等であるためです。 for each は要素の追加や削除には適していません。単に要素を横断するために使用する場合は、この書き方の方が簡潔かもしれません。

(2) Map インターフェースでのイテレーターの使用:


以下では、イテレーターを使用する 2 つの主な方法について説明するために、例として HashMap を使用します。

1. while() との組み合わせ

 ArrayList list = new ArrayList();
 //此处同样省略list的赋值过程
 for(Object array:list){
      System.out.println(array);
 }

// toString メソッドの書き換えはここでは焦点ではないため、出力をよりフォーマットしたい場合は、toString() メソッドを書き換えることができます。という記事があるので、今は議論しないでおこう。

Map インターフェースでのイテレーター アプリケーション メソッドは、Collection でのイテレーター メソッドとは少し異なります。entrySet() メソッドは、キーと値のペア全体を返すために使用されます。

2. for() との組み合わせ

 HashMap<K,V> myMap = new HashMap<K,V>();
 //省略myMap的的赋值过程
 Iterator<Map.Entry<K,V> it=myMap.entrySet().iterator();
 while(it.hasNext()){
     System.out.println(it.next());
 }

上記にはいくつかの例があるため、ここで原理を説明し続ける必要はありません。

同様に、Iterator の代わりに for each を使用します。


 HashMap<K,V> myMap=new HashMap<K,V>();
 //省略myMap的赋值过程
 for(Iterator<Map.Entry<K,V>> it=myMap.entrySet().iterator();it.hasNext();){
       System.out.println(it.next());
 }

for each また、entrySet() メソッドについての質問がある場合は、この記事を参照してください。あまり説明しないでください。

結論: Iterator クラスは java.util パスにカプセル化されているため、Iterator を使用するには、java.util.Iterator をインポートするか、java.util.*;


概要

を使用する必要があります。

以上がJavaのイテレータの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。