3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Java】Progateで取り上げられていないJavaの基本まとめ~その3・Map編~

Last updated at Posted at 2019-07-13

Map

1.Mapとは何か

Mapはキーと値をペアにして扱う為のもの。

コレクションとの違いについて
image.png
・コレクション・インターフェースは、枝分かれしたインターフェースの階層構造のルーツにある。
・コレクションには、要素の重複を許すコレクションもあれば、許さないものもあったりする。また、順序が付けられたものもあれば、そうでないものもある。
・このコレクションの特徴ごとにサブインターフェースが定義されている。次の図は、ルーツにあたるCollectionから枝分かれした主要なサブインターフェースを示している。
・ちなみに、Mapもコレクションに似ているがコレクションではない。
引用元: https://eng-entrance.com/java-collection

Mapを使用する為にはjava.util.Mapimportする必要がある
Mapはインターフェースである為、実装を持たない。その為Mapインターフェースを実装したクラスもimportする必要がある

Mapを実装するクラス

HashMap

Main.java
import java.util.map;
import java.util.HashMap;

public class Main {
  public static void main(String[] args) {
    Map<String, String> map = new HashMap<>();
    System.out.println(map);
  }
}

TreeMap

LinkedHashMap

2.プリミティブ型を扱う時は?

Mapintlongなどのプリミティブ型を扱うことはできない。
これらを扱う場合はプリミティブ型のラッパークラス、Integer, Longなどを使用する。

Main.java
import java.util.Map;
import java.util.Hashmap;

public class Main {
  public static void main(String[] args) {
    Map<Integer, String> map = new HashMap<>();
    System.out.println(map);
  }
}

3.Mapの基本メソッド

1)put

第一引数にキー、第二引数に値をとり、Mapにキーと値を追加する。
返り値は、Mapに同じキーが登録されていればその値、なければnull

  Map<String, String> map = new HashMap<>();
  map.put("a", "Apple");
  map.put("b", "Banana");
  System.out.println(map);


// > {a=Apple, b=Banana}

putで値の上書きもできる。

  Map<String, String> map = new HashMap<>();
  map.put("a", "Apple");
  map.put("b", "Banana");

  map.put("a", "Anaconda");
  map.put("b", "Bison");

  System.out.println(map);

// > {a=Anaconda, b=Bison}

2)get

Mapからキーを指定して値を取得する。
指定されたキーがMapにない場合はnullを返す。

    Map<String, String> map = new HashMap<>();
    map.put("a", "Apple");
    map.put("b", "Banana");

    System.out.println(map.get("a"));
    System.out.println(map.get("c"));

// > Apple
//   null

3)getOrDefault

Mapから値を取り出す際に値がなかったらデフォルト値を返す。

    Map<String, String> map = new HashMap<>();
    map.put("a", "Apple");
    map.put("b", "Banana");
  
    System.out.println(map.getOrDefault("a", "Anime"));
    System.out.println(map.getOrDefault("c", "Cartoon"));

// > Apple
//   Cartoon

4)size

Mapのサイズ(要素の個数)を取得する。

    System.out.println(map.size());

// > 2

5)containsKey

Mapに指定のキーがあるかどうかを確認する。
真偽値が返ってくる。

    Map<String, String> map = new HashMap<>();
    map.put("a", "Apple");
    map.put("b", "Banana");

    System.out.println(map.containsKey("a"));
    System.out.println(map.containsKey("c"));

// >true
//  false

6)containsValue

Mapに指定の値があるかどうかを確認する。
真偽値が返ってくる。

    Map<String, String> map = new HashMap<>();
    map.put("a", "Apple");
    map.put("b", "Banana");

    System.out.println(map.containsKey("Apple"));
    System.out.println(map.containsKey("Cherry"));

// >true
//  false

7)putAll

    Map<String, String> map = new HashMap<>();
    map.put("a", "Apple");
    map.put("b", "Banana");

    Map<String, String> map2 = new HashMap<String, String>();
    map2.put("c", "Cherry");
    map2.put("d", "Donut");

    map.putAll(map2);
    System.out.println(map);

// > {a=Apple, b=Banana, c=Cherry, d=Donut}

8)putIfAbsent

Mapにキーが登録されていなかった場合だけ、値を登録する。


    Map<String, String> map = new HashMap<>();
    map.put("a", "Apple");
    map.put("b", "Banana");

    map.putIfAbsent("a", "Almond");
    map.putIfAbsent("c", "Cherry");

    System.out.println(map);

// > {a=Apple, b=Banana, c=Cherry}

9)remove(key)

キーを指定して値を削除する。
指定した(削除した)キーに対応する値が返ってくる。
キーがなければnullを返す。


    Map<String, String> map = new HashMap<>();
    map.put("a", "Apple");
    map.put("b", "Banana");

    map.remove("a");
    System.out.println(map);

// > {b=Banana}

10)remove(key, value)

キーに対応する値が指定の値だった場合のみ削除する。
返り値は真偽値で、削除が実行されたらtrueを返す。


    Map<String, String> map = new HashMap<>();
    map.put("a", "Apple");
    map.put("b", "Banana");

    map.remove("a", "Almond");
    map.remove("b", "Banana");

    System.out.println(map);

// > {a=Apple}

11)clear

Mapをクリアする。


    Map<String, String> map = new HashMap<>();
    map.put("a", "Apple");
    map.put("b", "Banana"); 

    map.clear();
    System.out.println(map);

// > {}

4.Mapのループ処理

1)キーのループ処理


import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;

public class Main {
  public static void main(String[] args) {
    Map<String, String> map = new HashMap<>();
    map.put("a", "Apple");
    map.put("b", "Banana");
    map.put("c", "Cherry");
    map.put("d", "Donut");
    map.put("e", "Egg");

    Iterator<String> it = map.keySet().iterator();
    while (it.hasNext()) {
      String key = it.next();
      System.out.println(key);
    }
  }
}

/* > a
     b
     c
     d
     e
*/

keySet()メソッドを使い、Mapのキーだけをコレクションとして取得する
②keySetからiterator()を取得することでループ処理ができるようになる

iteratorとは?

コレクション(=要素の大きさ・数が決まっていない配列みたいなもの)のループ処理に便利なインターフェース

hasNext()メソッドとnext()メソッド

hasNextメソッド: 次の要素があればtrue、なければfalseを返す
nextメソッド: 次の要素を返す
iteratorインターフェースを実装するのに必要となるメソッド。

2)値のループ処理


import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;

public class Main {
  public static void main(String[] args) {
    Map<String, String> map = new HashMap<>();
    map.put("a", "Apple");
    map.put("b", "Banana");
    map.put("c", "Cherry");
    map.put("d", "Donut");
    map.put("e", "Egg");

    Iterator<String> it = map.values().iterator();
    while (it.hasNext()) [
      String key = it.next();
      System.out.println(key);
    }
  }
}

/* > Apple
     Banana
     Cherry
     Donut
     Egg

*/

values()メソッドを使い、Mapの値をコレクションとして取得する
②そのkeySetからiterator()を取得することでループ処理ができるようになる

3)キーと値のループ処理


import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;

public class Main {
  public static void main(String[] args) {
    Map<String, String> map = new HashMap<>();
    map.put("a", "Apple");
    map.put("b", "Banana");
    map.put("c", "Cherry");
    map.put("d", "Donut");
    map.put("e", "Egg");

    Iterator<String> it = map.entrySet().iterator();
    while (it.hasNext()) [
      Map.Entry<String, String> entry = it.next();
      System.out.println(entry.getKey() + " = " + entry.getValue());
    }
  }
}


/* > a = Apple
     b = Banana
     c = Cherry
     d = Donut
     e = Egg
*/

entrySet()メソッド

Mapのキーと値をコレクションとして取得する為のメソッド。
このコレクションの中身はMap.Entryというクラス。

getKey()getValue()メソッド

Map.Entryクラスがもつメソッド。
getKey() : キーを取得
getValue() : 値を取得

4)for文を使ってループ処理

配列用のfor文、についてはprogateでも取り上げられている内容です。
忘れてしまったらprogateを復習してみましょう。

// 省略 //

    for (map.Entry<String, String> entry : map.entrySet() {
      System.out.println(entry.getKey() + " = " + entry.getValue());
    }
  
/* > a = Apple
     b = Banana
     c = Cherry
     d = Donut
     e = Egg
*/

5)forEachを使ってループ処理

java8以降、ラムダ式でキーと値のループ処理ができるようになった。
それがforEach()メソッド。


    forEach ((key, value) -> {
      System.out.println(key + " = " + value);
    });
  
/* > a = Apple
     b = Banana
     c = Cherry
     d = Donut
     e = Egg
*/
3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?