マップ

「マップ」は,キーと値を結びつけた,連続したデータ群を格納するためのデータ構造である. 連想配列と呼ぶこともある.型パラメータとして2パラメータを指定する< K,V > のような形で指定でき,Kの場所でキーの型を指定する.Vの場所で値の型を指定する.

TreeMapHashMapなどがあり,TreeMapではキーの順番に格納され,HashMapでは順番が約束されない.

以下のHashMapでは,キーの型がString,値の型がStringである.キーになる値を指定して,その値を取得するメソッドはget()である.このメソッドにキーを渡すと,それに対応した値が返される.

HashMapの値全体を列挙などするときには,反復子を用いる.ここでは,キーの集合を反復子として用いるため,それをkeySet()にて取得して,それを反復子として設定している. その反復子を用いて,次の値があるかどうかをhasNext()にて確認してその値を表示している.ただし,その値は,キーの値であるため,そのキーに対応する値も表示するにはどのようにすればよいだろうか.

import java.util.HashMap;
import java.util.Iterator;
public class Main
{
    public static void main(String args[])
    {
        HashMap<String, String> countryMap = new HashMap<String, String>();
        countryMap.put("日本","東京");
        countryMap.put("中国","北京");
        countryMap.put("フィリピン","マニラ");
        countryMap.put("イギリス", "ロンドン");
        countryMap.put("カナダ", "オタワ");
        //すべてのキーを取り出して,Interatorとして使えるようにする.
        Iterator<String> it = countryMap.keySet().iterator();
        //キーを順に取り出す.
        while(it.hasNext())
        {
            System.out.println(it.next());
        }
    }
}
日本
カナダ
フィリピン
イギリス
中国

キーを指定して,それを元に値を取り出すには,以下のように指定する.

        //キーを指定して,値を取り出す
String country = "中国";
System.out.println(country + "の首都は"+ countryMap.get(country));

これをiteratorで呼び出す方法に組み込むと以下のようになる.

import java.util.HashMap;
import java.util.Iterator;
public class Main
{
    public static void main(String args[])
    {
        String country;
        HashMap<String, String> countryMap = new HashMap<String, String>();
        countryMap.put("日本","東京");
        countryMap.put("中国","北京");
        countryMap.put("フィリピン","マニラ");
        countryMap.put("イギリス", "ロンドン");
        countryMap.put("カナダ", "オタワ");
        Iterator<String> it = countryMap.keySet().iterator();
        while(it.hasNext())
        {
            country = it.next();
            System.out.println(country + "の首都は"+ countryMap.get(country));
        }
    }
}
フィリピンの首都はマニラ
イギリスの首都はロンドン
中国の首都は北京
日本の首都は東京
カナダの首都はオタワ

TreeMapでは,マップは、使用するコンストラクタに応じて,そのキーの自然順序付け,またはマップ作成時に提供される Comparator によってソートできる.

import java.util.Iterator;
import java.util.TreeMap;
public class Main
{
    public static void main(String args[])
    {
        TreeMap<String, String> countryMap = new TreeMap<String, String>();
        countryMap.put("日本","東京");
        countryMap.put("中国","北京");
        countryMap.put("フィリピン","マニラ");
        countryMap.put("イギリス", "ロンドン");
        countryMap.put("カナダ", "オタワ");
        String country = "中国";
        System.out.println(country + "の首都は"+ countryMap.get(country));
        Iterator<String> it = countryMap.keySet().iterator();
        while(it.hasNext())
        {
            System.out.println(it.next());
        }
    }
}
中国の首都は北京
イギリス
カナダ
フィリピン
中国
日本