マップ
「マップ」は,キーと値を結びつけた,連続したデータ群を格納するためのデータ構造である. 連想配列と呼ぶこともある.型パラメータとして2パラメータを指定する< K,V > のような形で指定でき,Kの場所でキーの型を指定する.Vの場所で値の型を指定する.
TreeMap,HashMapなどがあり,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()); } } }
中国の首都は北京 イギリス カナダ フィリピン 中国 日本