JavaでMapインターフェースを使う方法【初心者向け】
初心者向けにJavaでMapインターフェースを使う方法について解説しています。TreemapやHashmapなどのデータ構造をMapインターフェースを使うことで効率よく扱えます。実際にサンプルプログラムを書いているので、書いて理解しましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
この記事では、JavaのMapインターフェースの使い方について説明します。
Mapインターフェースを用いることで、TreeMapやHashMapといったデータ構造を統一的に取り扱えます。より効率的に実装できるようになるので、ぜひ覚えておきましょう。
なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。
今回はMapインターフェースについて解説しよう。
田島メンター!Mapインターフェースというのは何ですか~?
キーとそれに対応した値によるデータ構造のことだよ。詳しく見ていこう。
お願いします!
Mapインターフェースとは
Mapはキーと値を対応づけるデータ構造です。
また、各キーは一つの値だけに対応づけられます。同一のキーを複数登録することはできません。
Mapへのキーと値の登録の流れを追ってみましょう。
- 初期状態
キー 値 - キー「A」に対して、値「あいうえお」を登録します。
キー 値 A あいうえお - キー「B」に対して、値「かきくけこ」を登録します。
キー 値 A あいうえお B かきくけこ - キー「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クラスを利用する場合などがあるんですね。
次は実際に書いてみよう。キーに文字列、値に整数を用いてみるよ。
実際に書いてみよう
名前(文字列)と年齢(整数)の対応を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人ずつつき、マンツーマンのメンタリングで学習をサポートし、習得することが可能です。
この記事を監修してくれた方
橋本紘希 開発実績: Javaプログラムを用いた業務用Webアプリケーションや、基幹システム用バッチアプリケーションなどの設計構築試験。 |