目次
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());
}
}
なんでもリストには、鳥リスト、魚リストが設定されており、
[[すずめ, からす], [あじ]] のような状態となっています。
①の記載のみだと、出力結果は [[すずめ, からす], []] のようになり、空のリストが入ったままの状態となります。
この空のリストを除外するために②をおこないます。
そのため、出力結果は [[すずめ, からす]] となります。