疲れたらやすむ

Javaを学ぶ上でハマったところを書いていきます。iPhoneアプリ開発や日常ネタもあるかも。

【Java】Listの取り出し

私が今の段階で思いつくパターンは3通りです。
Java8でラムダ式による取得も可能になったようです。
が、今回は割愛させていただきます。
ラムダ式については今後勉強した上でご紹介出来ればと思います。

まずはListを用意。
IteratorをインポートしているのはIteratorによる取得を記述するためです。
Study.java

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

public class Study {
	public static void main(String[] args) {
		List<String> strList = new ArrayList<String>();

		strList.add("Hello");
		strList.add("World");
		strList.add("!!");

		//TODO	取り出し処理記述
	}
}

TODO部分に取り出しを行う処理を記述します。
以下3パターンどれを記述しても同じ実行結果になります。

for文

for (int i = 0; i < strList.size(); i++) {
	String str = strList.get(i);
	System.out.println(str);
}

拡張for文

for (String str : strList) {
	System.out.println(str);
}

Iterator

for (Iterator<String> iterator = strList.iterator(); iterator.hasNext();) {
	String str = iterator.next();
	System.out.println(str);
}

そして実行結果。

実行結果

Hello
World
!!

個人的にはまだ一般的なfor文が頭から抜けきってない部分があります。
基本的にそれで学習を進めていたからです。

書き方として一番簡単なのは拡張for文ではないでしょうか。
カウンタを必要とせず、取り出したい型の変数を用意するだけで中身を全て取り出してくれます。
逆に、カウンタが必要な場合はそれを用意してあげる必要があります。

カウンタ付き拡張for文

int i = 0;
for (String str : strList) {
	System.out.println(str);
	i++;
}


それぞれの取り出し方の違いは、可読性もそうですが処理速度も変わる様です。
ただし処理速度については明確なことな正直わかりません。
LinkedListを使う場合、インデックスによる取得を行っているfor文では処理速度が遅くなるみたいですが。
まだまだ勉強不足ですのでそのあたりを今後追求していこうと思います。

今回は以上になります。