こんにちは、コイキングです。
本記事では'マップ(Map)'について、説明したいと思います。
1. マップ(Map)とは?
マップはKey-Value構造に構成されているデータを格納するデータ構造です。
Keyを使った**データ検索に最適化されたデータ構造で、 Key値は重複できないという特徴があります。
Mapを実装したのはHashMap, LinkedHashMap, TreeMapなどがあります。
2. HashMap
1) HashMapとは?
ハッシュマップとはハッシュテーブルを使ってマップを実装したデータ構造で、
Key値をハッシュ関数を通してデータの参照値が格納されているバーケット(bucket)のインデクスに変換し、バーケットのインデクスを用いてデータにアクセスします。
※ 長所
- Key値でデータを検索するため、 検索速度が速いです。
※ 短所
- バーケットの長さ調整が必要な場合、 処理速度の遅延が発生する可能背があります。
- データの格納時に配列やリストより多めのメモリーを使います。
- Key値がソートされてないです。
※ 主に使っている所
- ユニークなKey値を利用したデータの活用が必要な場合
- データの入力・削除が頻繁な場合
2) データの挿入
put()メソッドを用いてデータの格納ができます。
putメソッドの引数としてKeyの値と、Value(格納する値)を渡してデータを格納します。
Map<String, String> map = new HashMap<String, String>();
map.put("HashMap-key-01", "HashMap-value-01");
map.put("HashMap-key-02", "HashMap-value-02");
map.put("HashMap-key-03", "HashMap-value-03");
map.put("HashMap-key-04", "HashMap-value-04");
map.put("HashMap-key-05", "HashMap-value-05");
3) データの出力
get()メソッドとKey値を使う。
System.out.println(map.get("HashMap-key-02"));
全体データ出力(keySetメソッドを使う)
for (String key : map.keySet()) {
System.out.println(String.format("Using keySet key : [%s], value : [%s]", key, map.get(key)));
}
全体データ出力(key値のIteratorを使う)
Iterator<String> keys = map.keySet().iterator();
while(keys.hasNext()) {
String key = keys.next();
System.out.println(String.format("Using Iterator key : [%s], value : [%s]", key, map.get(key)));
}
全体データ出力 (entrySetメソッドを使う)
for (Map.Entry<String, String> obj : map.entrySet()) {
System.out.println(String.format("Using entrySet key : [%s], value : [%s]", obj.getKey(), obj.getValue()));
}
4) データの更新
putを使う ※ 同じキーを用いてデータを格納すると値が上書きされ、更新が行われる
map.put("HashMap-key-02", "HashMap-value-02_updated");
replaceメソッドを使う
map.replace("HashMap-key-02", "HashMap-value-02_updated_new");
5) データの削除
removeメソッドを使う
map.remove("HashMap-key-02");
全体データの削除
map.clear();
3. LinkedHashMap
1) LinkedHashMapとは?
リンクドハッシュマップはハッシュマップを継承して実装されたデータ構造で、
Key値の順序を保存するため、 Keyを順次ソートする必要がある場合使います。
※ データのCRUD機能はHashMapのメソッドを共通で使えるため省略。
4. TreeMap
1) TreeMapとは?
ツリーマップはツリー(木)構造基盤で実装されたマップです。
※ 長所
- メモリー使用量がHashMapより少ないです。
- データのKey値がソートされています。
※ 短所
- データの入力・削除時にHashMapより処理速度が遅いです。(TreeのNode再配置が行われる可能性があり)
※ データのCRUD機能はHashMapのメソッドを共通で使えるため省略。
※ 例示コード
https://github.com/leeyoungseung/algorithmBasic/blob/master/algorithm/src/basic/B_12_Map.java
※ 韓国語のポストは以下のURLで確認できます。
https://koiking.tistory.com/84?category=1068655