Java-using-iterator
Java-イテレーターの使用方法
多くの場合、コレクション内の要素を循環する必要があります。 たとえば、各要素を表示できます。 これを行う最も簡単な方法は、イテレータを使用することです。イテレータは、イテレータまたはListIteratorインタフェースのいずれかを実装するオブジェクトです。
イテレータを使用すると、コレクションを循環して、要素を取得または削除できます。 ListIteratorは、Iteratorを拡張して、リストの双方向の走査と要素の変更を可能にします。
イテレータを介してコレクションにアクセスする前に、コレクションを取得する必要があります。 各コレクションクラスには、イテレータをコレクションの先頭に戻すiterator()メソッドがあります。 この反復子オブジェクトを使用すると、コレクション内の各要素に一度に1つの要素にアクセスできます。
一般的に、イテレータを使用してコレクションのコンテンツを循環するには、次の手順に従います-
- コレクションのiterator()メソッドを呼び出して、コレクションの先頭までのイテレーターを取得します。
- hasNext()を呼び出すループを設定します。 hasNext()がtrueを返す限り、ループを繰り返します。 *ループ内で、next()を呼び出して各要素を取得します。
Listを実装するコレクションの場合、ListIteratorを呼び出してイテレータを取得することもできます。
イテレータで宣言されたメソッド
Sr.No. | Method & Description |
---|---|
1 |
さらに要素がある場合はtrueを返します。 そうでなければ、falseを返します。 |
2 |
Object next( ) 次の要素を返します。 次の要素がない場合は、NoSuchElementExceptionをスローします。 |
3 |
void remove( ) 現在の要素を削除します。 next()の呼び出しが先行していないremove()を呼び出そうとすると、IllegalStateExceptionがスローされます。 |
ListIteratorによって宣言されたメソッド
Sr.No. | Method & Description |
---|---|
1 |
void add(Object obj) next()の次の呼び出しで返される要素の前のリストにobjを挿入します。 |
2 |
boolean hasNext( ) 次の要素がある場合にtrueを返します。 そうでなければ、falseを返します。 |
3 |
boolean hasPrevious( ) 前の要素がある場合はtrueを返します。 そうでなければ、falseを返します。 |
4 |
Object next( ) 次の要素を返します。 次の要素がない場合、NoSuchElementExceptionがスローされます。 |
5 |
int nextIndex( ) 次の要素のインデックスを返します。 次の要素がない場合、リストのサイズを返します。 |
6 |
Object previous( ) 前の要素を返します。 前の要素がない場合、NoSuchElementExceptionがスローされます。 |
7 |
int previousIndex( ) 前の要素のインデックスを返します。 前の要素がない場合は、-1を返します。 |
8 |
void remove( ) リストから現在の要素を削除します。 next()またはprevious()が呼び出される前にremove()が呼び出されると、IllegalStateExceptionがスローされます。 |
9 |
void set(Object obj) objを現在の要素に割り当てます。 これは、next()またはprevious()の呼び出しによって最後に返された要素です。 |
例
以下に、IteratorとListIteratorの両方を示す例を示します。 ArrayListオブジェクトを使用しますが、一般的な原則はあらゆるタイプのコレクションに適用されます。
もちろん、ListIteratorは、Listインターフェイスを実装するコレクションでのみ使用できます。
import java.util.*;
public class IteratorDemo {
public static void main(String args[]) {
//Create an array list
ArrayList al = new ArrayList();
//add elements to the array list
al.add("C");
al.add("A");
al.add("E");
al.add("B");
al.add("D");
al.add("F");
//Use iterator to display contents of al
System.out.print("Original contents of al: ");
Iterator itr = al.iterator();
while(itr.hasNext()) {
Object element = itr.next();
System.out.print(element + " ");
}
System.out.println();
//Modify objects being iterated
ListIterator litr = al.listIterator();
while(litr.hasNext()) {
Object element = litr.next();
litr.set(element + "+");
}
System.out.print("Modified contents of al: ");
itr = al.iterator();
while(itr.hasNext()) {
Object element = itr.next();
System.out.print(element + " ");
}
System.out.println();
//Now, display the list backwards
System.out.print("Modified list backwards: ");
while(litr.hasPrevious()) {
Object element = litr.previous();
System.out.print(element + " ");
}
System.out.println();
}
}
これは、次の結果を生成します-
出力
Original contents of al: C A E B D F
Modified contents of al: C+ A+ E+ B+ D+ F+
Modified list backwards: F+ D+ B+ E+ A+ C+