LoginSignup
0
0

More than 3 years have passed since last update.

【Java】 java.util コレクションフレームワーク ( Map )

Last updated at Posted at 2020-11-27

【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

解説

こちらのコードの手順は、、

  1. Mapを インポートする
  2. newの時に キーと値 の両方を型として指定
  3. put 」を使用して 値 を追加する
  4. get 」で キー値 を指定して出力

といった記述をしています。

① 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("クチバジム", "マチス");
            }
        };
        // ここまで =====================================

参考文献・記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0