東大ニート

東大卒のニートが勉強したことをメモするブログ

<Java>Mapインターフェースの使い方

配列とリストについては前に少し調べましたが、マップについてはよくわかっていなかったので調べてみました。

キーと値のセットでマッピングを保持できて便利です。Mapインターフェースの使い方とメソッド、実装クラスについてメモします。

 以下の3サイトを参考にさせていただきました。

www.javadrive.jp

d.hatena.ne.jp

yonchu.hatenablog.com


Mapインターフェースの使い方

以下の例では、実装クラスとしてHashMapクラスを使用しています。

  1. import java.util.Map;

  2. import java.util.HashMap;

  3. public class Main {

  4.        public static void main(String args[]){

  5.               Map<String, Integer> hm = new HashMap<String, Integer>();
  6.               hm.put("Japan", 126700000);
  7.               hm.put("Korea", 50600000);
  8.               for (String key: hm.keySet()) {
  9.                      System.out.println(hm.get(key));
  10.               }
  11.        }

  12. }

ポイント1. Mapインターフェースのインポート(1・2行目)

まず、java.utilパッケージに含まれるMapインターフェースをインポートします。
「import java.util.Map;」を記述します。

また、実装クラスを使用する場合は、「import java.util.HashMap;」のようにクラスをインポートします。

ポイント2. HashMapインスタンスの作成(6行目)

マップもリストと同様、ジェネリクス機能を持つので、インスタンスの作成時に型を指定します。キーの型を最初に記述し、その後に値の型を記述します。

キーがString型、要素がInteger型のHashMapインスタンス「hm」を作成する場合
「Map<String, Integer> hm = new HashMap<String, Integer>();」と記載します。

ポイント3. 要素の出力(9〜11行目)

Mapの要素を出力する時は拡張for文を使います。foreach文のようなやつですね。

「for(String key: hm.keySet()) { 」のように記載しますが、これで全ての要素を順に取り出すことができます。よんちゅBlogさんの記事(JavaのList・Mapのfor文処理覚書 - よんちゅBlog)に他の処理も含めて詳しく記載されています。

 

各実装クラスの特徴(順序の保持)

HashMap、LinkedHashMap、TreeMapがキーを保持する順序は以下のようになっています(他の特徴については調べ次第、また記述します)。

  • HashMap

順序を保持しない

  • LinkedHashMap

キーを格納した順に保持

  • TreeMap

キーの昇順に保持

 

Mapインターフェースのメソッド

上記のコード例では「put」メソッド(7〜8行目)や「keySet」メソッド(9行目)、「get」メソッド(10行目)を使用しています。

代表的なメソッドは以下の通りです。
※記述例ではHashMapインスタンス「hm」への処理を想定して記載しています。

  • put

マップにキーと値を追加します。「hm.put("Japan", 126700000);」と記述します。
キーと対応する値を更新する場合も、putを使用すれば大丈夫です。

  • remove

指定されたキーのマッピングを削除します。「hm.remove("Japan");」と記述します。

  • clear

全てのキーと値を削除します。「hm.clear();」と記述します。

  • get

指定されたキーと対応する値を返します。「int n = hm.get("Japan");」のように記述します。

  • containsKey

指定したキーが存在する場合にtrueを返します。なければfalseとなります。
「boolean bl = hm.containsKey();」のように記述します。

  • keySet

マップに含まれるキーのSetビューを返します。「Set<String> s = hm.keySet();」のように記述します。

  • values

マップに含まれる値のCollectionビューを返します。
「Collection<Integer> c = hm.values();」のように記述します。

  • isEmpty

マップがキーと値のマッピングを保持しない場合はtrueを返します。保持していればfalseとなります。「boolean bl = hm.isEmpty();」のように記述します。

  • size

格納されているキーと値のマッピング数を返します。「int n = hm.size();」のように記述します。