1
2

More than 1 year has passed since last update.

イテレータの使用方法まとめ

Last updated at Posted at 2022-11-22

目次

 1.はじめに
 2.イテレータとは
 3.イテレータの使用方法
 4.応用編

1. はじめに

現場での実装時、リスト内の要素除外のためリスト.removeと記述していたのですが、
それだとリストの一番目の要素がなくなり、次の要素に進めなくなるためシスエラーになってしまうという指摘をいただき、イテレータを使用すれば、removeできることを知りました。
(※リストを最後の要素からループすればイテレータを使用せずにremove可能)

今回は復習のため、こちらにまとめていきたいと思います。

2. イテレータとは

イテレータは、集合の要素に順番にアクセスする時に使用するインターフェースです。
集合にはリスト、セット、マップなど複数の種別がありますが、イテレータはそれらにアクセスするための、共通の仕組みを提供します。
イテレータを用いることで、個別の実装を意識せずに、要素へのアクセスを自然に記述できます。

↓上記はこちらの記事から引用させていただきました。

3. イテレータの使用方法

package jp.co.study.sample;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Qiita {
	public static void main (String args[]) {
		// 鳥リスト作成
		List<String> birdLsit = new ArrayList<String>();
		birdLsit.add("すずめ");
		birdLsit.add("からす");
		
		// 鳥リストから"からす"を除外
		for (Iterator<String> birdLsitIrt
					= birdLsit.iterator(); birdLsitIrt.hasNext();) {

			String bird = birdLsitIrt.next();
			if (bird.equals("からす")) {
				birdLsitIrt.remove();
			}
		}
		
		// 出力
		System.out.println(birdLsit.toString());
	}
}

iterator()メソッド ・・・イテレータ取得
hasNext()メソッド・・・次の要素取得、要素があればtrue、なければfalseを返す
next()メソッド  ・・・次の要素を返す

hasNext()メソッドがtrueを返す間だけ、next()メソッドを呼び出しています。
鳥リスト[すずめ, からす] から「からす」を除外しています。
そのため、出力結果は [すずめ] となります。

4. 応用編

package jp.co.study.sample;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Qiita {
	public static void main (String args[]) {
		// なんでもリスト作成
		List<List<String>> whateverLsit = new ArrayList<List<String>>();
		
		// 鳥リスト作成
		List<String> birdLsit = new ArrayList<String>();
		birdLsit.add("すずめ");
		birdLsit.add("からす");
		whateverLsit.add(birdLsit);
		
		// 魚リスト作成
		List<String> fishLsit = new ArrayList<String>();
		fishLsit.add("あじ");
		whateverLsit.add(fishLsit);

		// ① 要素が"あじ"のとき、そのリストから除外
		for (Iterator<List<String>> whateverLsitItr
				= whateverLsit.iterator(); whateverLsitItr.hasNext();) {
			
			List<String> strlist = whateverLsitItr.next();
			for (Iterator<String> strlistItr
					= strlist.iterator(); strlistItr.hasNext();) {
				
				String str = strlistItr.next();
				if (str.equals("あじ")) {
					strlistItr.remove();
				}
			}
			
			// ②で空になってしまったリストを、なんでもリストから除外
			if (strlist.isEmpty()) {
				whateverLsitItr.remove();
			}
		}
		
		// 出力
		System.out.println(whateverLsit.toString());
	}
}

なんでもリストには、鳥リスト、魚リストが設定されており、
[[すずめ, からす], [あじ]] のような状態となっています。

①の記載のみだと、出力結果は [[すずめ, からす], []] のようになり、空のリストが入ったままの状態となります。
この空のリストを除外するために②をおこないます。
そのため、出力結果は [[すずめ, からす]] となります。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2