そもそもJavaのMapとは?便利なJavaのMapをマスターしよう!

- システム
エンジニア - JavaのMapとはどのようなものなのでしょうか。
- プロジェクト
マネージャー - キーとそれに紐づいた値を扱うのに適したインターフェイスです。
JavaのMapとは?
JavaのMapは以下の例のような、キーとそれに紐づいた値を扱うのに適したインターフェイスです。一言で言うと辞書的な機能を持っているということです。Mapのような仕組みを連想配列とも言います。
キー:””Java”” 値:””Oracleが提供するオブジェクト指向言語。””
キー:””C#”” 値:””Microsoftが提供するオブジェクト指向言語。””
この記事ではMapインターフェイスを実装した便利なクラスを紹介するので、是非ご覧ください。
HashMapの宣言
Mapを実装したクラスで多く使われるのはHashMapです。以下のように宣言します。なおMapを利用するにはJavaソースの先頭に「import java.util.*;」を追加してください。
Map<String,String> map = new HashMap<String,String>();
Stringが2つありますが、最初のStringはキーの型で、次のStringは値の型です。なおJava 10から型推論ができるようになったため、右側の型指定は以下のように省略できるようになりました。
Map<String,String> map = new HashMap<>();
HashMapの格納と取得
以下がHashMapのデータの格納と取得の方法です。putでキーと値を格納し、getでキーを指定して取得して、値を表示しています。
Map<String,String> map = new HashMap<>();
map.put(“”Java””, “”Oracleの言語””);
map.put(“”C#””, “”Microsoftの言語””);
String value = map.get(“”Java””);
System.out.println(value);
実行結果は以下が表示されます。
Oracleの言語
HashMapの中身を全て取得する
上のJavaサンプルのように1つだけ取得するのではなく、全てのデータを取得するにはどうしたら良いのでしょうか。サンプルに以下を追加しましょう。
for (Map.Entry<String,String> e : map.entrySet()) {
System.out.println(e.getKey() + “” “” + e.getValue());
}
実行すると以下のように表示されます。entrySetメソッドでEntryインターフェイスの型としてペアで取得できるということです。
C# Microsoftの言語
Java Oracleの言語
forEachメソッドとラムダ式
上のJavaサンプルは拡張for文を使ってHashMapの中身を表示しましたが、forEachメソッドとラムダ式を使う方法もあります。上と同じ事を以下でも実現できます。
map.forEach((key, value) -> {
System.out.println(key +”” “” + value);
});
なおキーだけを取得する場合はkeySet、値だけを取得する場合はvaluesで以下のように
します。
for (String key : map.keySet()) {
System.out.println(key);
}
for (String value : map.values()) {
System.out.println(value);
}
HashMapの更新
HashMapは同じキーで値の違うデータをputすると、上書きされます。キーは重複を許容しないということです。値を変えたい場合は再度putすれば良いということですが、変更する意図を明示した方が良いので、以下のJavaサンプルのようにreplaceを使うべきでしょう。
Map<String,String> map = new HashMap<>();
map.put(“”Java””, “”Oracleの言語””);
map.replace(“”Java””, “”オブジェクト指向言語””);
System.out.println(map.get(“”Java””));
map.replace(“”Java””, “”オブジェクト指向言語””, “”Oracleのオブジェクト指向言語””);
System.out.println(map.get(“”Java””));
2つ目のreplace(A,B,C)は「キーAの値がBだった場合、Cに変更する」と言う意味です。
実行すると以下が表示されます。
オブジェクト指向言語
Oracleのオブジェクト指向言語
HashMapの削除
HashMapの中身を削除するには以下のようにremoveメソッドを使用します。
Map<String,String> map = new HashMap<>();
map.put(“”Java””, “”Oracleの言語””);
map.remove(“”Java””);
System.out.println(map.get(“”Java””));
map.put(“”Java””, “”Oracleの言語””);
map.remove(“”Java””, “”Oracleの言語””);
System.out.println(map.get(“”Java””));
System.out.println(map.size()+”” “”+map.isEmpty());
2つ目のremove(A,B)は「キーAの値がBだった場合、削除する」と言う意味です。最後にHashMapの要素数と、空になっているかどうかを表示しています。実行結果は以下になります。
null
null
0 true
なお以下のようにclearを使うと中身を全て削除できます。
map.clear();
HashMapの値チェック
HashMapの中身に指定したキーや値があるかどうかは以下のようにします。
Map<String,String> map = new HashMap<>();
map.put(“”Java””, “”Oracleの言語””);
if (map.containsKey(“”Java””)) System.out.println(“”キーがあります。””);
if (map.containsValue(“”Oracleの言語””)) System.out.println(“”値があります。””);
キーがあるかどうかはgetしてnullが返るかどうかでチェックすればいいのでは、と思うかもしれませんが、以下のようにkeyが存在しているものの値がnullということもありえます。
map.put(“”Java””, null);
TreeMapはキーを自動的にソートしてくれる
JavaにはHashMapとは別にTreeMapというクラスもあります。使い方はHashMapと同じですが、キーを自動的にソートしてくれるという違いがあります。
TreeMap<Integer,String> map = new TreeMap<>();
map.put(3, “”花子””);
map.put(1, “”太郎””);
map.put(2, “”二郎””);
map.forEach((key, value) -> {
System.out.println(key +”” “” + value);
});
実行すると以下のようにキーが昇順にソートされているのがわかります。
1 太郎
2 二郎
3 花子
ただしHashMapでもソートされている場合もあります。それでもHashMapはソートされることが保証されてはいません。
- システム
エンジニア - JavaのMapを今まで使用したことがありませんでしたが、これほど便利なインターフェイスだったのですね。
- プロジェクト
マネージャー - Mapはキーと値のペアになっているデータを扱う時には欠かせない機能です。是非マスターしておきましょう。
JavaのMapはとても便利!
JavaのMapについて解説しましたが、ご理解頂けましたでしょうか。キーと値のペアになっているデータを扱う時には欠かせない機能なので、是非マスターしてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
-
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) -
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) -
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) -
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) -
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) -
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)