JavaでMapインターフェースを使う方法【初心者向け】

初心者向けにJavaでMapインターフェースを使う方法について解説しています。TreemapやHashmapなどのデータ構造をMapインターフェースを使うことで効率よく扱えます。実際にサンプルプログラムを書いているので、書いて理解しましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

この記事では、JavaのMapインターフェースの使い方について説明します。

Mapインターフェースを用いることで、TreeMapやHashMapといったデータ構造を統一的に取り扱えます。より効率的に実装できるようになるので、ぜひ覚えておきましょう。

 

なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。

 

田島悠介

今回はMapインターフェースについて解説しよう。

大石ゆかり

田島メンター!Mapインターフェースというのは何ですか~?

田島悠介

キーとそれに対応した値によるデータ構造のことだよ。詳しく見ていこう。

大石ゆかり

お願いします!

Mapインターフェースとは

Mapはキーと値を対応づけるデータ構造です。

また、各キーは一つの値だけに対応づけられます。同一のキーを複数登録することはできません。

Mapへのキーと値の登録の流れを追ってみましょう。

  1. 初期状態
    キー
  2. キー「A」に対して、値「あいうえお」を登録します。
    キー
    A あいうえお
  3. キー「B」に対して、値「かきくけこ」を登録します。
    キー
    A あいうえお
    B かきくけこ
  4. キー「A」に対して、値「さしすせそ」を登録します。上書き登録になります。
    キー
    A さしすせそ
    B かきくけこ

 

Mapの書き方

Mapはインターフェースのため、直接インスタンス化できません。

Mapインターフェースを実装するクラスを自作するか、HashMapやTreeMapのような適当な実装クラスを用います。

 

Mapインターフェースを実装するクラスを自作する

自作クラスMyMapで、Mapインターフェースを実装します。getメソッドや、putメソッドなどを実装する必要があります。

public class MyMap<K, V> implements Map<K, V> {
  @Override
  public V get(Object key) {
    // 略
  }

  @Override
  public V put(Object key, Object value) {
    // 略
  }

  // その他、Mapインターフェースの要求するメソッドを実装する必要がある。
}

public class UseMyMap {
  public void useMyMap() {
    Map<String, String> map = new MyMap<String, String>();
    map.put("A", "あいうえお");
    map.put("B", "かきくけこ");
  }
}

 

HashMapクラスを用いる

既存のHashMapクラスを用いてインスタンスを作成します。

public class UseHashMap {
  public void useHashMap() {
    Map<String, String> map = new HashMap<String, String>();
    map.put("A", "あいうえお");
    map.put("B", "かきくけこ");
  }
}

 

田島悠介

Mapインターフェースの基本の書き方だね。

大石ゆかり

クラスを自作する他に、HashMapクラスを利用する場合などがあるんですね。

田島悠介

次は実際に書いてみよう。キーに文字列、値に整数を用いてみるよ。

[PR] Javaで挫折しない学習方法を動画で公開中

実際に書いてみよう

名前(文字列)と年齢(整数)の対応をMapインターフェースで管理するプログラムです。

ソースコード

import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class MapDemo {
  public static void main(String[] args) {
    Map<String, Integer> nameAge = new TreeMap<String, Integer>();
    nameAge.put("太郎", 40);
    nameAge.put("次郎", 30);
    printNameAge(nameAge);
    nameAge = new HashMap<String, Integer>();
    nameAge.put("三郎", 20);
    nameAge.put("四郎", 10);
    printNameAge(nameAge);
  }

  private static void printNameAge(Map<String, Integer> map) {
    map.forEach((name, age) -> {
      System.out.println(name + "は" + age + "歳です。");
    });
  }
}

 

実行結果

太郎は40歳です。
次郎は30歳です。
四郎は10歳です。
三郎は20歳です。

 

解説

名前(文字列)と年齢(整数)の対応づける、Mapインターフェースの変数nameAgeを宣言します。

最初にTreeMapでインスタンス化し、データを登録、表示します。そして、次にHashMapでインスタンス化し、同様にデータを登録、表示します。

注意点として、TreeMapでは登録順に表示されましたが、HashMapではそうではありません。

Map実装には、キーの順序を保証するもの(例 TreeMap)と保証しないもの(例 HashMap)があります。

 

まとめ

Mapはインターフェースなので、それ自体を利用することはありませんが、TreeMapやHashMapといった便利なデータ構造の共通インターフェースを提供します。

キーと値を対応づけて管理するようなケースでMapを用いると、効率よく実装できるでしょう。

入門向けJavaの学習サイトもまとめているので、合わせてご覧ください。

 

田島悠介

Mapインターフェースの実装例を見てみたよ。

大石ゆかり

キーには名前を表すString型、値には年齢を表すInteger型を使ったわけですね。

田島悠介

同じMapインターフェースでも、TreeMapとHashMapでは順序の扱いが違ってくることも頭に入れておこう。

大石ゆかり

了解です。ありがとうございました!

また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。

JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

この記事を監修してくれた方

橋本紘希
システムインテグレータ企業勤務のシステムエンジニア

開発実績: Javaプログラムを用いた業務用Webアプリケーションや、基幹システム用バッチアプリケーションなどの設計構築試験。