Javaエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnetJava
  2. Javaコラム
  3. Java TIPS
  4. そもそもJavaのMapとは?便利なJavaのMapをマスターしよう!

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

  • Java TIPS
公開日時:   更新日時:
そもそも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