Javaでキーと値をセットにして管理できる連想配列、Mapの使い方と、種類について説明したいと思います。
Mapの宣言と初期化
Mapの宣言と初期化は、下記のようにデータ型を指定してHashMapによって初期化します。
Map<キーのデータ型, 値のデータ型> map1 = new HashMap<キーのデータ型, 値のデータ型>();
データ型を変えることで、様々なリストを使う事が出来ます
// Integerでキーを指定し、Integerで値を格納するMap
Map<Integer, Integer> map1 = new HashMap<Integer, Integer>();
// Integerでキーを指定し、Stringで値を格納するMap
Map<Integer, String> map2 = new HashMap<Integer, String>();
// Stringでキーを指定し、Stringで値を格納するMap
Map<String, String> map3 = new HashMap<String, String>();
値の追加 put
Mapへ値を追加するにはputを使います、put(キー, 値)と書くことで、キーに紐づけて値を追加できます。
// Integerでキーを指定し、Stringで値を格納するMap
Map<Integer, String> map1 = new HashMap<Integer, String>();
// put(キー, 値)で追加する
map1.put(1, "前沢牛"); // キーが1で"前沢牛"を格納
map1.put(2, "葉山牛"); // キーが2で"葉山牛"を格納
map1.put(3, "飛騨牛"); // キーが3で"飛騨牛"を格納
値の取得 get
Mapから値を取得するにはgetを使います、get(キー)と書くことで、キーに紐づいた値が取得できます。
// Stringでキーを指定し、Stringで値を格納するMap
Map<String, String> map1 = new HashMap<String, String>();
// put(キー, 値)で追加する
map1.put("A", "伊賀牛"); // キーが"A"で"伊賀牛"を格納
map1.put("B", "近江牛"); // キーが"B"で"近江牛"を格納
map1.put("C", "熊野牛"); // キーが"C"で"熊野牛"を格納
System.out.println(map1.get("A"));
System.out.println(map1.get("B"));
System.out.println(map1.get("C"));
実行結果
伊賀牛
近江牛
熊野牛
Mapのキーをfor文で取得する方法 keySet
Mapから格納されているキーを全て取得する方法として、for文でkeySetを使います。
// Stringでキーを指定し、Stringで値を格納するMap
Map<String, String> map1 = new HashMap<String, String>();
// put(キー, 値)で追加する
map1.put("A", "伊賀牛"); // キーが"A"で"伊賀牛"を格納
map1.put("B", "近江牛"); // キーが"B"で"近江牛"を格納
map1.put("C", "熊野牛"); // キーが"C"で"熊野牛"を格納
for (String key : map1.keySet()) {
System.out.println("キー:" + key);
}
実行結果
キー:A
キー:B
キー:C
Mapの値をfor文で取得する方法 values
Mapから格納されている値を全て取得する方法として、for文でvaluesを使います。
// Stringでキーを指定し、Stringで値を格納するMap
Map<String, String> map1 = new HashMap<String, String>();
// put(キー, 値)で追加する
map1.put("A", "伊賀牛"); // キーが"A"で"伊賀牛"を格納
map1.put("B", "近江牛"); // キーが"B"で"近江牛"を格納
map1.put("C", "熊野牛"); // キーが"C"で"熊野牛"を格納
for (String value : map1.values()) {
System.out.println("値:" + value);
}
実行結果
値:伊賀牛
値:近江牛
値:熊野牛
Mapの種類 HashMap、TreeMap、LinkedHashMap
MapにはHashMap、TreeMap、LinkedHashMapと3種類のMapがあります。
HashMap | 格納された中身の順番はバラバラ、キーでソートされてるように見えるけど保証はない、 だけど早い |
TreeMap | キーでソートされた状態で格納される |
LinkedHashMap | 追加した順番で格納される |
HashMap
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("C", "神戸ビーフ");
hashMap.put("B", "米沢牛");
hashMap.put("A", "松坂牛");
System.out.println("HashMap");
for (String key : hashMap.keySet()) {
System.out.println("キー:" + key + ", 値:" + hashMap.get(key));
}
実行結果
HashMap
キー:A, 値:松坂牛
キー:B, 値:米沢牛
キー:C, 値:神戸ビーフ
TreeMap
TreeMap<String, String> treeMap = new TreeMap<String, String>();
treeMap.put("C", "神戸ビーフ");
treeMap.put("B", "米沢牛");
treeMap.put("A", "松坂牛");
System.out.println("TreeMap");
for (String key : treeMap.keySet()) {
System.out.println("キー:" + key + ", 値:" + hashMap.get(key));
}
実行結果
TreeMap
キー:A, 値:松坂牛
キー:B, 値:米沢牛
キー:C, 値:神戸ビーフ
LinkedHashMap
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();
linkedHashMap.put("C", "神戸ビーフ");
linkedHashMap.put("B", "米沢牛");
linkedHashMap.put("A", "松坂牛");
System.out.println("LinkedHashMap");
for (String key : linkedHashMap.keySet()) {
System.out.println("キー:" + key + ", 値:" + hashMap.get(key));
}
実行結果
LinkedHashMap
キー:C, 値:神戸ビーフ
キー:B, 値:米沢牛
キー:A, 値:松坂牛
Javaの連想配列にはいろいろ種類があり、それぞれ出来ることが違うので、用途によって使い分けできるようになると、とても便利です。
コメント