Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaコレクションのnext()とhasNext()の違いを徹底解説!Iteratorの使い方まとめ

Javaでは、IteratorListIteratorといったインターフェースを使うことで、コレクションオブジェクト(ListやSetなど)の要素を1つずつ順番に取り出すことができます。この記事では、Iteratorで頻繁に使われるhasNext()メソッドとnext()メソッドの違いについて、サンプルコードを交えながら詳しく解説します。

hasNext()メソッドとは

hasNext()は、コレクション内にまだ次の要素が存在するかどうかを確認するためのメソッドです。次の要素があればtrueを、なければfalseを返します。戻り値はboolean型である点に注意してください。このメソッド自体はカーソル(読み取り位置)を進めません。

サンプルコード

import java.util.ArrayList;
import java.util.Iterator;
public class hasNextExample{
    public static void main(String[] args){
        ArrayList <String> list = new ArrayList<String>();
        //ArrayListオブジェクトのインスタンス化
        list.add("JavaFX");
        list.add("Java");
        Iterator<String> it = list.iterator();
        System.out.println(it.hasNext());
        it.next();
        System.out.println(it.hasNext());
        it.next();
        System.out.println(it.hasNext());
    }
}

実行結果

true
true
false

この例では、ArrayListに「JavaFX」と「Java」の2つの要素を追加しています。最初のhasNext()の呼び出し時点では要素が残っているためtrueが返ります。next()を2回呼び出してすべての要素を読み取った後は、もう次の要素が存在しないためfalseが返されます。

next()メソッドとは

next()は、コレクションから次の要素そのものを取得するためのメソッドです。IteratorおよびListIteratorのどちらでも利用でき、呼び出されるたびにカーソルが次の要素へと進みます。なお、次の要素が存在しない状態でnext()を呼び出すとNoSuchElementExceptionがスローされるため、通常はhasNext()と組み合わせて使用します。

サンプルコード

import java.util.ArrayList;
import java.util.Iterator;
public class nextExample{
    public static void main(String[] args){
        ArrayList <String> list = new ArrayList<String>();
        //ArrayListオブジェクトのインスタンス化
        list.add("JavaFX");
        list.add("Java");
        list.add("WebGL");
        list.add("OpenCV");
        list.add("OpenNLP");
        list.add("JOGL");
        list.add("Hadoop");
        list.add("HBase");
        list.add("Flume");
        list.add("Mahout");
        list.add("Impala");
        System.out.println("配列リストの内容(先頭から末尾へ):");
        Iterator<String> it = list.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

実行結果

配列リストの内容(先頭から末尾へ):
JavaFX
Java
WebGL
OpenCV
OpenNLP
JOGL
Hadoop
HBase
Flume
Mahout
Impala

このように、while(it.hasNext())の条件式で要素の有無を確認しながら、ループ内でit.next()によって各要素を順番に取り出しています。これはJavaでコレクションを走査する際の定番パターンです。

next()とhasNext()の違いまとめ

メソッド戻り値主な役割
hasNext()boolean型(true / false)次の要素が存在するかどうかを確認する(カーソルは移動しない)
next()コレクションの要素(E)次の要素を取得し、カーソルを次の位置へ進める

ポイント: 両者は対照的な関係にあります。hasNext()は「確認だけを行う」メソッド、next()は「実際に要素を取り出して進む」メソッドです。安全にコレクションを走査するには、必ずhasNext()で要素の存在をチェックしてからnext()を呼び出すようにしましょう。

  1. JavaのIteratorとListIteratorの違いを徹底解説!特徴と使い分けのポイント

    IteratorとListIteratorとは Javaでは、コレクションに格納された要素を1つずつ順番に取り出して処理するために、IteratorとListIteratorという2つのインターフェースが提供されています。 両者は内部実装こそ異なるものの、目的はどちらも「コレクション内のデータを順次走査する」ことです。しかし、利用できるコレクションの種類や、走査中に行える操作には大きな違いがあります。 IteratorとListIteratorの主な違い一覧 No.比較項目IteratorListIterator 1適用範囲List、Set、Queueなど、あらゆる種類のコレクションに対し

  2. 【Java】CollectionインターフェースとCollectionsクラスの違いとは?違いを徹底解説

    はじめにJavaのコレクションフレームワークを学んでいると、「Collection」と「Collections」という名前が似ている2つの存在に出会います。名前はほぼ同じですが、その役割はまったく異なります。この記事では、両者の違いをわかりやすく解説します。CollectionとCollectionsの主な違いCollectionはJavaにおけるインターフェースです。一方、Collectionsはユーティリティクラスであり、コレクションを操作するための便利な静的メソッドを提供します。Set、List、QueueなどはCollectionインターフェースのサブインターフェースです。また、Map