Java-using-iterator

提供:Dev Guides
移動先:案内検索

Java-イテレーターの使用方法

多くの場合、コレクション内の要素を循環する必要があります。 たとえば、各要素を表示できます。 これを行う最も簡単な方法は、イテレータを使用することです。イテレータは、イテレータまたはListIteratorインタフェースのいずれかを実装するオブジェクトです。

イテレータを使用すると、コレクションを循環して、要素を取得または削除できます。 ListIteratorは、Iteratorを拡張して、リストの双方向の走査と要素の変更を可能にします。

イテレータを介してコレクションにアクセスする前に、コレクションを取得する必要があります。 各コレクションクラスには、イテレータをコレクションの先頭に戻すiterator()メソッドがあります。 この反復子オブジェクトを使用すると、コレクション内の各要素に一度に1つの要素にアクセスできます。

一般的に、イテレータを使用してコレクションのコンテンツを循環するには、次の手順に従います-

  • コレクションのiterator()メソッドを呼び出して、コレクションの先頭までのイテレーターを取得します。
  • hasNext()を呼び出すループを設定します。 hasNext()がtrueを返す限り、ループを繰り返します。 *ループ内で、next()を呼び出して各要素を取得します。

Listを実装するコレクションの場合、ListIteratorを呼び出してイテレータを取得することもできます。

イテレータで宣言されたメソッド

Sr.No. Method & Description
1
  • boolean hasNext( )*

さらに要素がある場合は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+