イテレーターインターフェイス
1。Iteratorインターフェイス
反復可能
組み込みメソッドIterator()は、新しく作成されたイテレーターを返します。
のように:
public Interface iterable {iterator iterator(); } Iteratorには、実装するHasNext()とNext()の2つの方法があります。 public interface iterator {boolean hasnext();項目Next(); void remove(); //オプションの実装}
2。インポートを実装します
java.util.iteratorをインポートします。
一般的なクラス、iterableインターフェイスを実装して、反復可能な<item>を実装します
IterableのIterator()メソッドを実装し、定義されたイテレータタイプを返します。
ITERATOR TYPEを定義しますITERATOR <item>を実装します
hasnext()、next()、およびremove()を実装します
3。例:
public class stack <item> Iterable <itert <item> {public iterator <iter> iterator(){return new listiterator <item>(first); } private class listiterator <item> iterator <item> {private node <item> current; public listiterator(node <item> first){current = first; } public boolean hasnext(){return current!= null; } public void remove(){新しいunsupportedoperationexception(); } public item next(){if(!hasnext())throw new nosuchelementexception(); item item = current.item; current = current.next;返品アイテム。 }}} 4。呼び出し方法
繰り返しのために
for(string s:stack)system.out.println(s);
INT/ダブルなどの基本的なタイプの場合は、以前の変換関係を使用してください
5。ループトラバーサル
iterator i = stack.iterator(); while(i.hasnext()){string s = i.next(); }列挙インターフェイス
列挙は、java.utilのインターフェイスクラスです。列挙では、データセットの列挙に関する方法をカプセル化します。 Iteratorに似ています。コレクション内の要素を通過するために使用されます。ただし、列挙の列挙は、ベクトルとハッシュテーブルタイプのコレクションのトラバース要素の関数のみを提供します。このタイプのコレクションオブジェクトは、要素()メソッドを呼び出して列挙オブジェクトを取得し、次のメソッドを呼び出してコレクション内の要素を横断します。
hasmorelements():列挙オブジェクトにまだデータがあるかどうかを判断します
nextelement():列挙オブジェクトの次のデータを取得します
例は次のとおりです。
列挙req = request.getParameternames(); while(req.hasmoreelements()){object obj =(object)req.nextelement(); if(obj.tostring()。trim()。equals( "lastpage")){system.out.println( "lastpage /n"); } else if(obj.toString()。trim()。equals( "nextpage")){system.out.println( "nextpage"); }}イテレータと列挙の違い
Javaコレクションでは、通常、「Iterator」または「Enumerationクラス」を通じてコレクションを通過します。今日は、それらの違いについて一緒に学びましょう。
まず、enumeration.javaとiterator.javaのソースコードを見てから、それらの違いについて話しましょう。
列挙はインターフェイスであり、そのソースコードは次のとおりです。
パッケージjava.util; public interface enumeration <e> {boolean hasmorelements(); e nextelement();} Iteratorはインターフェイスでもあり、そのソースコードは次のとおりです。
パッケージjava.util; public interface iterator <e> {boolean hasnext(); e next(); void remove();}コードを読んだ後、コードの違いについて話しましょう。
(01)異なる関数インターフェイス
列挙には、2つの関数インターフェイスのみがあります。列挙により、コレクションのデータのみを読み取ることができますが、データを変更することはできません。
Iteratorには3つの関数インターフェイスのみがあります。コレクションのデータの読み取りに加えて、Iteratorはデータを削除することもできます。
(02)Iteratorは故障メカニズムをサポートしますが、列挙はそうではありません。
列挙は、JDK 1.0によって追加されたインターフェイスです。使用される機能には、ベクター、ハッシュテーブル、その他のクラスが含まれます。これらはすべてJDK 1.0に追加されています。列挙の目的は、トラバーサルインターフェイスを提供することです。列挙自体は同期をサポートしませんが、ベクターとハッシュテーブルを実装する場合、同期が追加されます。
Iteratorは、JDK 1.2にのみ追加されるインターフェイスです。また、HashmapやArrayListなどのコレクションのトラバーサルインターフェイスも提供します。 Iteratorは、フェイルファーストメカニズムをサポートします。同じコレクションのコンテンツで複数のスレッドが動作する場合、フェールファストイベントが生成される場合があります。