Iterator
日本語 | 反復子 |
英語 | iterator |
ふりがな | いてれーたー |
フリガナ | イテレーター |
J2SEに含まれるインターフェイスのひとつ。パッケージも含めたインターフェイス名はjava.util.Iterator。
イテレーターとして機能するためのメソッドを持つ。
コレクションはCollectionインターフェイスのiterator()メソッドでIteratorインターフェイスの実装クラスを取得できる。
配列もCollectionインターフェイスのtoArray()でコレクション化できるため、配列もイテレーターでアクセスできる。
Iteratorはコレクションの中身の要素ひとつを指し示す「カーソル」を持つ。
Collectionインターフェイスのiterator()で取得した時点で、カーソルは「先頭のひとつ前」を指し示している。
next()メソッドで「次の要素にカーソルを進めその値を返す」という処理をする。ただし、戻り値の型はObjectなので、コレクションに格納されている実際の型にダウンキャストする必要がある。
hasNext()メソッドで「カーソルの次の要素が存在するか」を取得することができる。
添え字によるインデックスナンバーを使用して取得する方法に比べて、イテレーターは「先頭から順次取得しかできない」「前進と取得を別々に行えない」「取得しかできない」「ランダムアクセスできない」といった制限があるが、逆にそれが配列操作で陥りやすいバグを回避してくれるため、可能な限りイテレーターを使用すべき。
イテレーターとして機能するためのメソッドを持つ。
コレクションはCollectionインターフェイスのiterator()メソッドでIteratorインターフェイスの実装クラスを取得できる。
配列もCollectionインターフェイスのtoArray()でコレクション化できるため、配列もイテレーターでアクセスできる。
Iteratorはコレクションの中身の要素ひとつを指し示す「カーソル」を持つ。
Collectionインターフェイスのiterator()で取得した時点で、カーソルは「先頭のひとつ前」を指し示している。
next()メソッドで「次の要素にカーソルを進めその値を返す」という処理をする。ただし、戻り値の型はObjectなので、コレクションに格納されている実際の型にダウンキャストする必要がある。
hasNext()メソッドで「カーソルの次の要素が存在するか」を取得することができる。
添え字によるインデックスナンバーを使用して取得する方法に比べて、イテレーターは「先頭から順次取得しかできない」「前進と取得を別々に行えない」「取得しかできない」「ランダムアクセスできない」といった制限があるが、逆にそれが配列操作で陥りやすいバグを回避してくれるため、可能な限りイテレーターを使用すべき。
参考サイト
// Sample.java
import java.util.ArrayList;
import java.util.Iterator;
public class Sample
{
public static void main( String[] args )
{
// ArrayListを作ります。
ArrayList arylst = new ArrayList();
arylst.add( new Integer( 100 ) );
arylst.add( new Integer( 200 ) );
arylst.add( new Integer( 300 ) );
// イテレーターを使用して全項目を出力します。
for( Iterator iter = arylst.iterator(); iter.hasNext(); )
{
// next()メソッドで取得すると同時にひとつ進めます。
Integer integer = (Integer)iter.next();
System.out.print( integer + ", " );
}
System.out.println();
// 100, 200, 300,
}
}
import java.util.ArrayList;
import java.util.Iterator;
public class Sample
{
public static void main( String[] args )
{
// ArrayListを作ります。
ArrayList arylst = new ArrayList();
arylst.add( new Integer( 100 ) );
arylst.add( new Integer( 200 ) );
arylst.add( new Integer( 300 ) );
// イテレーターを使用して全項目を出力します。
for( Iterator iter = arylst.iterator(); iter.hasNext(); )
{
// next()メソッドで取得すると同時にひとつ進めます。
Integer integer = (Integer)iter.next();
System.out.print( integer + ", " );
}
System.out.println();
// 100, 200, 300,
}
}
// Sample.java import java.util.ArrayList; import java.util.Iterator; public class Sample { public static void main( String[] args ) { // ArrayListを作ります。 ArrayList arylst = new ArrayList(); arylst.add( new Integer( 100 ) ); arylst.add( new Integer( 200 ) ); arylst.add( new Integer( 300 ) ); // イテレーターを使用して全項目を出力します。 for( Iterator iter = arylst.iterator(); iter.hasNext(); ) { // next()メソッドで取得すると同時にひとつ進めます。 Integer integer = (Integer)iter.next(); System.out.print( integer + ", " ); } System.out.println(); // 100, 200, 300, } }