この記事は90%~100%ChatGPTで作られています。
このブログではAffinger5を使用しています。
1. JavaのMap型について
JavaのMap型は、キーと値のペアでデータを管理するコレクション型の一つです。
キーと値のペアはエントリと呼ばれ、このエントリを保存し、キーを基にした検索などが可能となります。
特に、HashMap、TreeMap、LinkedHashMapなどの具体的なクラスがMapインターフェースを実装しており、それぞれ特性があります。

2. HashMap, TreeMap, LinkedHashMapの特性
まずはそれぞれの特性を知っておくことが大切です。
- HashMapは、一般的な用途で最も使用されるMapです。要素の順序は保証されませんが、データの追加・取得が高速です。
- TreeMapは、キーの自然順序によって要素がソートされます。データの追加・取得はHashMapよりも遅くなりますが、ソートされたMapが必要な場合に有用です。
- LinkedHashMapは、エントリが追加された順序またはアクセスされた順序で要素を保持します。順序付きのMapが必要な場合に使用します。

3. Mapの作成と要素の追加
では、具体的にMapの作成と要素の追加方法について見ていきましょう。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 |
import java.util.*; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); System.out.println(map); } } |
出力結果
{key1=value1, key2=value2, key3=value3}
このコードでは、String型のキーと値を持つHashMapを作成し、3つの要素を追加しています。
putメソッドを使用してキーと値のペアをMapに追加します。

4. 要素の取得
もちろん、追加した要素を取得することも可能です。
その際には、キーを指定してgetメソッドを使います。それでは実際に見てみましょう。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.util.*; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); String value1 = map.get("key1"); System.out.println(value1); } } |
出力結果
value1
このコードでは、"key1"に対応する値をgetメソッドを用いて取得し、出力しています。

5. 要素の修正
追加した要素の値を後から修正することも可能です。
これもputメソッドを使って実行します。同じキーで新しい値をputすると、古い値が新しい値に更新されます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.util.*; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); map.put("key1", "updatedValue1"); System.out.println(map); } } |
出力結果
{key1=updatedValue1, key2=value2, key3=value3}
このコードでは、"key1"の値を"updatedValue1"に更新しています。

6. 要素の削除
不要になった要素は、removeメソッドを使って削除します。
このとき、削除する要素のキーを指定します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.util.*; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); map.remove("key1"); System.out.println(map); } } |
出力結果
{key2=value2, key3=value3}
このコードでは、"key1"の要素を削除しています。

7. ループを使った要素の参照
Map内の全ての要素を参照したいときは、ループを使います。
for-eachループを使ってkeySetメソッドで取得したキーセット、もしくはentrySetメソッドで取得したエントリーセットを巡回します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.util.*; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); for (String key : map.keySet()) { System.out.println(key + ": " + map.get(key)); } } } |
出力結果
key1: value1
key2: value2
key3: value3
このコードでは、全てのキーと対応する値を出力しています。

8. HashMap, TreeMap, LinkedHashMapの違い
最後に、Javaで利用可能なMapの実装には、HashMap、TreeMap、LinkedHashMapといったものがあります。
これらは、内部でのデータの保持方法や、要素の順序などに違いがあります。
各Mapの特徴
- HashMap: 要素の追加順序を保持しませんが、パフォーマンスが最も高いです。
- TreeMap: 要素をキーの自然な順序で保持します。ソートされた順序で要素を取得したい場合に便利です。
- LinkedHashMap: 要素の追加順序を保持します。挿入順序で要素を取得したい場合に便利です。