
ArrayListの要素を順に取り出す方法としては、下記の四つの方法があります。
- for文を用いた要素の取り出し
- 拡張for文を用いた要素の取り出し
- イテレータを使った要素の取り出し
- ラムダ式、StreamAPIを使った要素の取り出し
for文
リストのサイズ文だけ、for文でループをまわしてカウントアップさせるやり方ですね。
少しややこしいですが、Javaの基本文法しか使っていないので、初心者にでも直感的に理解はできそうですし、古いJavaでも対応しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class Main { public static void main(String args[]) { ArrayList<String> list = new ArrayList<String>(); list.add("test"); list.add("test1"); for(int i=0;i<list.size();i++) { System.out.println(list.get(i)); } } } |
拡張for文
普通のfor文に比べると、拡張for文は非常にすっきりした形になりました。(ほぼ大丈夫かと思いますが、Java5以降しか使えないです。)
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Main { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("test"); list.add("test1"); for(String li:list) { System.out.println(li); } } } |
イテレータ
イテレータは、「リストの中身を順に取り出す専用道具」のようなイメージです。矢印でリストに含まれている要素を、移動していく感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Main { public static void main(String args[]) { ArrayList<String> list = new ArrayList<String>(); list.add("test"); list.add("test1"); Iterator<String> it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } } |
イテレータを使うには、まずは、「Iteratotr<型> 変数名 = ArrayList.iterator()」という形で、リストの最初の要素を指したインスタンスを取得できます。(newは必要ないです。)
その後は、「hasNext」によって、順番にリストの中を移動していきます。
ラムダ式、StreamAPI
1 2 3 4 5 6 7 8 9 10 11 |
public class Main { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("test"); list.add("test1"); list.stream().forEach(li -> System.out.println(li)); } } |
ラムダ式や、StreamAPIだと、非常にシンプルな形で記述できますよね。ただ、それと同時に非常に理解しづらいです。
詳しくは、下記の記事で解説していますので、あわせてご覧になってください。
各取り出し方のメリット、デメリット比較
要素の取り出し方 | メリット | デメリット |
---|---|---|
for文 | Java1.4以下でも利用可能 | 構文が少しわかりにくい |
拡張for文 | わかりやすい
HashSet等でも利用可能 |
Java5以降でないと使えない。 |
イテレータ | Java1.4以下でも利用可能
HashSetも利用可能 |
構文がわかりにくい |
ラムダ式、StreamAPI | 構文が短い
一番未来がある。 |
ラムダ式やStreamAPIの理解が必要
Java8以降でないと使えない。 |
総合的に見ると、現時点では、バランスのいい「拡張for文」が一番優れているのではないでしょうか。実際に開発現場で一番よく見かけます。
次点で、「ラムダ式、StreamAPI」を使った取り出し方だと思います。今後は、どんどんStreamAPIが使える前提のAPIが増えていくでしょうし、文もシンプルに書けるので今後の主流になっていきそうな気がします。
この記事へのコメントはありません。