こんにちは!エンジニアの中沢です。
JavaでMapからキー(key)と値(value)を取得したいと思ったことはありませんか?Mapからデータを取得するには、for文などのループ処理と、entrySetメソッドを使うのが便利です!今回は、for文の他にもIteratorのループ処理でMapからデータを取得する方法解説します!
この記事では、
- for文と拡張for文(for-each文)とは
- Mapのキー(key)をkeySetメソッドで取得する方法
- Mapの値(value)をvaluesメソッドで取得する方法
という基本的な内容から、「Iteratorとは」「Iteratorのループ処理でMapのキーと値を取得する方法」などの応用的な使い方に関しても解説していきます。今回はこれらの方法を覚えるために、Mapにfor文やforeachのループを使いキーと値を取得する方法をわかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
for文と拡張for文(for-each文)の使い方
Javaには他の言語で使われるforeach文はありません!
しかし、foreach文と同じような処理を行う拡張for文というものがあります!拡張for文は次のように使います。
for(型 変数名 : List名){ System.out.println(変数名); }
拡張for文の使い方を覚えるために次のプログラムでfor文と比較して使い方を確認してみましょう。
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("samurai"); list.add("engineer"); // 拡張for文(for-each文)の使い方 for (String s : list) { System.out.println(s); } System.out.println("拡張for文(for-each文)で取得しました!"); // for文の使い方 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } System.out.println("for文で取得しました!"); } }
[実行結果]
samurai engineer 拡張for文(for-each文)で取得しました! samurai engineer for文で取得しました!
ここでは拡張for文とfor文を使ってListのすべての要素を順番に表示しています。このように拡張for文を使うことで、他言語のforeach文のようにすっきりしたコードを書くことができます!
Mapのキーと値を拡張for文のループで取得する
Mapのキー(key)をkeySetメソッドで取得する方法
ここではMapのキーを拡張for文を使って順番に取得する方法を解説します。次のプログラムではMapのキーをkeySetメソッドで取得して、拡張for文で順番に表示しています。
import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("samurai", "侍"); map.put("engineer", "エンジニア"); for (String key : map.keySet()) { System.out.println(key); } } }
[実行結果]
samurai engineer
このようにkeySetメソッドと拡張for文を使うことで、Mapのキーを取得することができました!
Mapの値(value)をvaluesメソッドで取得する方法
次はMapの値を拡張for文を使って順番に取得する方法を解説します。次のプログラムではMapの値をvaluesメソッドで取得して、拡張for文で順番に表示しています。
import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("samurai", "侍"); map.put("engineer", "エンジニア"); for (String val : map.values()) { System.out.println(val); } } }
[実行結果]
侍 エンジニア
このようにvaluesメソッドと拡張for文を使うことで、Mapの値を取得することができました!
Mapのキーと値の両方をentrySetメソッドで取得する方法
最後に、Mapのキーと値の両方を拡張for文を使って順番に取得する方法を解説します。次のプログラムではMapのキーと値のペア(エントリー)をentrySetメソッドで取得しています。
その後に拡張for文の中でgetKeyメソッドとgetValueメソッドを使い、キーと値をそれぞれ取得して順番に表示しています。
import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("samurai", "侍"); map.put("engineer", "エンジニア"); for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); } } }
[実行結果]
samurai : 侍 engineer : エンジニア
このようにentrySetメソッドと拡張for文を使うことで、Mapのキーと値を取得することができました!
Mapのキーと値をIteratorのループで取得する
Iteratorとは
IteratorとはListやMapなどで、すべての要素に対して順番に処理をする機能のことです。MapにはListのように要素番号(index)がありませんが、Iteratorを使えばすべての要素を処理することができます!
Iteratorは次の要素がなくなるまで処理を続けるので、要素数がいくつあるのかを気にすることなく使えます!
Iteratorのループ処理でMapのキーと値を取得する方法
最後にIteratorを使ってMapのキーと値を取得する方法を解説します。Iteratorの使い方を覚えるために次のプログラムを見てみましょう。
import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("samurai", "侍"); map.put("engineer", "エンジニア"); for (Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator(); iterator.hasNext();) { Map.Entry<String, String> entry = iterator.next(); System.out.println(entry.getKey() + " : " + entry.getValue()); } } }
[実行結果]
samurai : 侍 engineer : エンジニア
ここでは、IteratorにMapのすべてのキーと値のペア(エントリー)をmap.entrySet().iterator()で設定して、iterator.hasNext()で次の要素がなくなるまでループ処理をしています。次にiterator.next()で一組のキーと値のペア取得しています。
最後にキーと値のペアからgetKeyメソッドとgetValueメソッドで、キーと値をそれぞれ取得して表示しています。
Listのループ処理をする方法
この記事ではMapのループ処理について学んできましたが、Listのループ処理について学びたい場合は次の記事で詳しく解説しています!
Mapの使い方総まとめ
Mapについてさらに詳しく知りたいときはこちらの記事を確認してください!
拡張for文とJava8のforEachの使い方総まとめ
拡張for文とJava8のforEachの使い方についてさらに詳しく知りたいときはこちらの記事を確認してください!
まとめ
いかがでしたか?今回はループ処理でMapのキーと値を取得する方法を解説しました。拡張for文はコードを簡潔に書くことができるのでぜひ覚えてくださいね。もしMapのループ処理を忘れてしまったらこの記事を確認してください!