【Map】キーと値とのマッピングを保持する
連想配列を取り扱うものに Map というコレクションがあります。
Mapとは
Mapは 「キー」と「値」 の二つの要素から成り立っています。
「 キー は値につける名前のようなもの 」で、値ひとつひとつに「 キー 」が存在しており、「 キー 」と「 値 」がペアになっているのが Map の特徴です。
キー は一意(同じものが複数存在しない)ですが、値は同じものが複数あってもいいです。
Map系クラスの特徴
マップはMapインターフェースを元に実装されていて、 HashMap、TreMap、LinkedHashMap の3つがよく使われます。
Mapクラス | 概要 |
---|---|
HashMap | ハッシュを使ったMapのデフォルト。 要素数によらない高速な検索ができます。 順序が保持されていないので目的の要素のキーを指定してそれに紐づく値を取得するのが早い |
TreeMap | 順序がキーの順番になっている。キーが数値の場合は小さい順に要素が保持されます。 キーが文字列の場合は、文字コードの順(辞書順、アルファベット順)に要素が保持される。 |
LinkedHashMap | キーの挿入順を保持する。 コンストラクタの引数の指定によって、 挿入順ではなくアクセス順を保持することもできます。デフォルトは挿入順です。 要素を追加(put)した順番に、そのままの順番で要素が保持されます。 または、コンストラクタの引数に順序付けモードを指定して、アクセス順(getした順番)に保持されるようにすることもできます。 |
Map の定義方法
Mapの初期化は以下のようにして行います。
ArrayList 等と同様の記述のしかたで書くことが出来、ダイヤモンド演算子を用いての記述も可能です。
基本の定義の仕方がこちらです。
マップインターフェース名<型> インスタンス名 = new コンストラクタ名<型>();
HashMap の定義
// HashMap(Mapの代わりに左辺を同じHashMapにしても可)
Map<String, Integer> hashMap = new HashMap<String, Integer>();
TreeMap の定義
// TreeMap(Mapの代わりに左辺を同じTreeMapにしても可)
Map<String, Integer> treeMap = new TreeMap<String, Integer>();
LinkedHashMap の定義
// LinkedHashMap(Mapの代わりに左辺を同じLinkedHashMapにしても可)
Map<String, Integer> treeMap = new LinkedHashMap<String, Integer>();
Map の使用例
まずはこちらのコードを御覧ください、説明はコメントアウトで記述してありますので、詳し異解説は下記に書きます。
package about_map;
// Mapのインポート
import java.util.HashMap;
import java.util.Map;
public class MainAboutMap {
public static void main(String[] args) {
// ここから =====================================
// 1 newの時にキーと値の両方を型として指定
Map<String, String> sampleHashMap = new HashMap<String, String>();
// 2「put」を使用して値を追加する
sampleHashMap.put("ニビジム", "タケシ");
sampleHashMap.put("ハナダジム", "カスミ");
sampleHashMap.put("クチバジム", "マチス");
// ここまで =====================================
// 3 「get」でキー値を指定して出力
System.out.println(sampleHashMap.get("ニビジム"));
System.out.println(sampleHashMap.get("ハナダジム"));
System.out.println(sampleHashMap.get("クチバジム"));
System.out.println(sampleHashMap.get("タマムシジム")); //null になる
}
}
出力結果
タケシ
カスミ
マチス
null
解説
こちらのコードの手順は、、
といった記述をしています。
① newの時にキーと値の両方を型として指定
生成したHashMapクラスのインスタンスをMap[インタフェース]型の変数sampleHashMapに保持。
// 1 newの時にキーと値の両方を型として指定
Map<String, String> sampleHashMap = new HashMap<String, String>();
② 「 put 」を使用して値を追加する
Map[インタフェース]では値の追加は「 add 」ではなく、
「 put 」という名前のメソッドで要素の追加を行います。
putメソッドには引数を2つ指定します。
第1引数がキー、第2引数がキーに紐づく値です。
// 2「put」を使用して値を追加する
sampleHashMap.put("ニビジム", "タケシ");
sampleHashMap.put("ハナダジム", "カスミ");
sampleHashMap.put("クチバジム", "マチス");
③ 「get」でキー値を指定して出力
値を取り出すときは、 getメソッド を使用します。
Map.getを使うと、Mapにputされているキー・値の対応付けの中から、キーに対応する値を取り出せます。キーがputされていない場合はnullが戻ります。
// 3 「get」でキー値を指定して出力
System.out.println(sampleHashMap.get("ニビジム"));
System.out.println(sampleHashMap.get("ハナダジム"));
System.out.println(sampleHashMap.get("クチバジム"));
System.out.println(sampleHashMap.get("タマムシジム")); //null になる
【補足】 put の別パターン
putする時の別パターンでこちらの方法でも値の追加が可能です。
コメントアウト部分を上記のコードの部分を境に入れ替えて使用してください。
やっていることは上記のコードと同じなので、出力結果も同じです。
// ここから =====================================
// 1 newの時にキーと値の両方を型として指定
Map<String, String> sampleHashMap = new HashMap<String, String>();
// 2「put」を使用して値を追加する
sampleHashMap = new HashMap<String, String>() {
{
put("ニビジム", "タケシ");
put("ハナダジム", "カスミ");
put("クチバジム", "マチス");
}
};
// ここまで =====================================