当サイトは、アフィリエイト広告を利用しています

javaのMapインターフェースとMap操作メソッドについて

作成日:2022月03月12日
更新日:2023年08月27日

javaのMapについて調べたことや使い方をまとめる。

streamAPIについては下記の書籍が参考になりました

そもそもMapって?

Mapとはインターフェースであり、実際に使う場合は
Mapインターフェースを実装した下記のクラスからMapインスタンスを作り
使うことになる

  • HashMap
  • LinkedHashMap
  • TreeMap

などなど...

Mapの基本構文

下記のような形で宣言し、Mapインスタンスを生成する。

java
// 空のHashMapの場合
Map<String, Integer> map = new HashMap<String, Integer>()
// 初期値を設定する場合
Map<String, Integer> map = new HashMap<String, Integer>() {
{ put("c", 1); }
{ put("a", 0); }
{ put("b", 2); }
};

Mapインスタンスとは?

連想配列であり、キーと値をペア(エントリー)で保持するコレクション。
MapインスタンスはMapインターフェースのメソッドを使って操作をする

エントリーとは?

エントリーとはMap.Entryインスタンスのこと。
つまり上記のmapの中にはMap.Entryインスタンスが格納されているイメージ。
そのためentrySetメソッドでMapから値を取り出し、処理する場合は
Map.Entryインターフェースのメソッドで操作することになる

Mapの操作メソッド

Mapに対して操作できるメソッドを書いてみる

Mapのキーを指定して値を取り出す

よく使うパターン。
Mapからkeyを指定して値を取り出す。

java
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Map<String, Integer> map = new HashMap<String, Integer>() {
{ put("c", 1); }
{ put("a", 0); }
{ put("b", 2); }
};
// Your code here!
System.out.println(map.get("c"));
}
}

Mapのkeyをすべて取得する

Mapに格納されている内、keyだけをSetで取得する。
ラムダ式で処理をつなげることができる。
※javascriptでいうところのObject.keysメソッドと同じような感じ

java
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Map<String, Integer> map = new HashMap<String, Integer>() {
{ put("c", 1); }
{ put("a", 0); }
{ put("b", 2); }
};
<String> keys = map.keySet();
System.out.println(keys);
// 結果
// [a, b, c]
// ラムダ式で出力
map.keySet().stream().forEach(key->
System.out.println(key)
);
// 結果
// a
// b
// c
}
}

Mapの値をすべて取得する

Mapに格納されている内、値だけをCollectionで取得する。
ラムダ式で処理をつなげることができる。
※javascriptでいうところのObject.valuesメソッドと同じ

java
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Map<String, Integer> map = new HashMap<String, Integer>() {
{ put("c", 1); }
{ put("a", 0); }
{ put("b", 2); }
};
Collection<Integer> values = map.values();
System.out.println(values);
// 結果
// [0, 2, 1]
map.values().stream().forEach(val->
System.out.println(val)
);
// 結果
// 0
// 2
// 1
}
}

Mapのエントリーをすべて取得する

Mapに保管されている全要素を、「Map.Entry」クラスのインスタンスをSet
でまとめたものとして取り出す。 ラムダ式で処理をつなげることができる。
※javascriptでいうところのObject.entriesメソッドと同じ

java
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Map<String, Integer> map = new HashMap<String, Integer>() {
{ put("c", 1); }
{ put("a", 0); }
{ put("b", 2); }
};
// SetでMap.Entryを取得
Set<Map.Entry<String, Integer>> enties = map.entrySet();
System.out.println(enties);
// 結果
// [a=0, b=2, c=1]
System.out.println("【for文】");
// for文の場合
for(Map.Entry<String, Integer>ent : enties){
System.out.println(ent);
}
System.out.println("【forEach】");
// steramの場合
map.entrySet().stream().forEach(set->
System.out.println(set)
);
// 結果
// a=0
// b=2
// c=1
}
}

Map.Entryで使えるメソッド

ループ内でMap.Entryインスタンスに対しては
Map.Entryインターフェースのメソッドを使うことができる
getKeyメソッドとgetValueメソッドを使ってみる。

java
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Map<String, Integer> map = new HashMap<String, Integer>() {
{ put("c", 1); }
{ put("a", 0); }
{ put("b", 2); }
};
// SetでMap.Entryを取得
Set<Map.Entry<String, Integer>> enties = map.entrySet();
System.out.println(enties);
// 結果
// [a=0, b=2, c=1]
System.out.println("【for文】");
// for文の場合
for(Map.Entry<String, Integer>ent : enties){
System.out.println("key:"+ ent.getKey() + " value:"+ ent.getValue() );
}
System.out.println("【forEach】");
// steramの場合
map.entrySet().stream().forEach(set->
System.out.println("key:"+ set.getKey() + " value:"+ set.getValue())
);
// 結果
//key:a value:0
//key:b value:2
//key:c value:1
}
}

参考

【Java入門】Map(連想配列)のキーと値を取得する方法
コレクション・フレームワーク (4/5)
コレクションクラスとは>
インタフェースMap<K,V>
インタフェースMap.Entry<K,V>

新着記事

タグ別一覧
top