【解説】Java初心者向けMapの使い方! HashMapで電話帳を作る

こんにちは、飯塚です。
 
今回は下記の練習問題の解説です。まだ問題を見ていないという方は、ぜひ一度見て解いてみてください。Mapを理解するのに役立つと思います。
 
【練習問題】Java初心者向けMapの使い方! HashMapで電話帳を作る

回答例サンプルコード

回答例はこんな感じです。思ったよりシンプルでしょうか。

import java.util.HashMap;
import java.util.Scanner;

public class SampleHashMapAnswer {

	public static void main(String[] args) {

		// HashMapで電話帳を作成する
		HashMap<String, String> phoneBook = new HashMap<String, String>();
		phoneBook.put("田中", "080-1234-5678");
		phoneBook.put("鈴木", "090-0000-0000");
		phoneBook.put("ジョンソン", "001-010-1-888-888-8888");

		// Scannerのインタンスを生成する
		Scanner scanner = new Scanner(System.in);

		// ユーザーに入力を促す
		System.out.println("電話番号を知りたい方の名前を入力してください。");
		System.out.print("> ");

		// 入力された内容を受け取る
	    String inputName = scanner.nextLine();
	    // Scannerをクローズ
	    scanner.close();

	    // 電話帳から入力された名前と紐づく電話番号を取得
	    String phoneNumber = phoneBook.get(inputName);

    	if (phoneNumber != null) {
    		// 電話番号あり
		    System.out.println("電話番号は " + phoneNumber + " です。");

	    } else {
	    	// 電話番号なし
		    System.out.println("電話帳に名前が登録されていません。別の方の名前を入力してください。");
	    }
	}
}

Mapとは何か

Mapとは「キー(他と区別するための呼び名)」と「値」のセットで、データを管理する形の1つです。
 
今回の電話帳の問題では、
名前(例:田中)が「キー」
電話番号(例:080-1234-5678)が「値」
でした。
 
Mapを使うことで何が良いかというと、「値」が難しかったり複雑なものだとしても、「キー」さえ分かればデータを区別できることです。
 
今回のプログラムを使うと、電話番号を覚えていなくても名前だけが分かれば、知りたい電話番号を1つに絞って出力することができますよね。
 
注意点としては、「キー」は被ってはいけないということです。電話帳に同じ名前が2件登録されていると、どちらが電話番号を知りたい相手か分からないですよね。
 
もし「田中」が2人いたとしたら、「田中 一郎」「田中 次郎」のように、「キー」が被らないように登録する必要があります。

HashMapを使ったプログラムの書き方

回答例のソースを例に、プログラムの書き方を解説します。
 
インスタンスの作成方法は下記です。ArrayListの書き方と似ていますね。

HashMap<String, String> phoneBook = new HashMap<String, String>();

インスタンス作成時にキーと値の型を指定します。今回でいうとHashMap<名前、電話番号>なので、どちらもStringです。
HashMap<String, String>

putメソッドを使うことで、キーと値のセットをインスタンスに詰めることができます。
phoneBook.put("田中", "080-1234-5678");

詰めた値を取り出すのに使うのが、getメソッドです。
phoneBook.get(input)

HashMapを使った応用問題

実力試しの応用問題です。名前や電話番号、住所はどんな値でもOKです。ご自由に作ってみてください。

決まった名前が入力されたときに、その名前に紐づく電話番号と住所を返すプログラムを作成してください。

まとめ

いかがでしょうか。
 
始めてMapを知ったときは、こんな便利なものがあったんだなと感動した覚えがあります。HashMapの他にもTreeMapやLinkedHashMapがあるので、ぜひ勉強してみてください。
 
 
 
 
《関連記事》

記事をシェア
MOST VIEWED ARTICLES