Java EnumMap クラス:初心者のガイド

はじめに

こんにちは、未来のJavaプログラマーの皆さん!今日、私たちはJavaのEnumMapクラスのワクワクする世界に旅立ちます。さて、皆さんが考えているかもしれないことをお聞きします:「EnumMap?それは複雑そう!」しかし、心配しないで!このチュートリアルの最後には、EnumMapをプロのように使えるようになり、途中で少し楽しむこともできるかもしれません。

Java - EnumMap

まず、簡単なアナロジーから始めましょう。一週間の毎日に特別な引き出しを使って靴下を整理するということを想像してみてください。それがEnumMapの基本です——列挙型定数をキーとしてデータを整理する方法です。クールでしょう?それでは、いざ潜ってみましょう!

クラス宣言

まず最初に、EnumMapをどのように宣言するかを見てみましょう:

import java.util.EnumMap;

enum DaysOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);

この例では、DaysOfWeek列挙型をキーとして、String値をアクティビティを保存するEnumMapを作成しています。DaysOfWeek.class部分は、Javaにどの列挙型をキーとして使用するかを示しています。

クラスコンストラクタ

EnumMapには3つのコンストラクタがあります。それぞれを見ていきましょう:

  1. EnumMap(Class keyType)

    EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);

    これは、指定された列挙型のキーを持つ空のEnumMapを作成します。

  2. EnumMap(EnumMap<K,? extends V> m)

    EnumMap<DaysOfWeek, String> activitiesCopy = new EnumMap<>(activities);

    これは、指定されたEnumMapと同じキータイプを持つEnumMapを作成し、同じマッピング(存在する場合)で初期化します。

  3. EnumMap(Map<K,? extends V> m)

    Map<DaysOfWeek, String> regularMap = new HashMap<>();
    regularMap.put(DaysOfWeek.MONDAY, "Gym");
    EnumMap<DaysOfWeek, String> activitiesFromMap = new EnumMap<>(regularMap);

    これは、通常のMapから初期化されたEnumMapを作成します。

クラスメソッド

次に、EnumMapで最も一般的に使用されるメソッドのいくつかを見ていきましょう:

メソッド 説明
put(K key, V value) 指定された値を指定されたキーと関連付けます
get(Object key) 指定されたキーに関連付けられた値を返します
remove(Object key) このキーのマッピングが存在する場合は削除します
size() キーと値のマッピングの数を返します
clear() このマップからすべてのマッピングを削除します
containsKey(Object key) このマップに指定されたキーのマッピングが存在する場合はtrueを返します
containsValue(Object value) このマップが1つ以上のキーを指定された値にマッピングしている場合はtrueを返します

これらのメソッドを動作するように見ていきましょう:

EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);

// キーと値のペアを追加
activities.put(DaysOfWeek.MONDAY, "Gym");
activities.put(DaysOfWeek.TUESDAY, "Cinema");

// 値を取得
String mondayActivity = activities.get(DaysOfWeek.MONDAY);
System.out.println("月曜日のアクティビティ:" + mondayActivity);

// キーの存在を確認
boolean hasWednesday = activities.containsKey(DaysOfWeek.WEDNESDAY);
System.out.println("水曜日がある:" + hasWednesday);

// キーと値のペアを削除
activities.remove(DaysOfWeek.TUESDAY);

// サイズを取得
int size = activities.size();
System.out.println("アクティビティの数:" + size);

// マップをクリア
activities.clear();

この例では、異なる日にアクティビティを追加し、値を取得し、キーの存在を確認し、エントリを削除し、最後にマップ全体をクリアします。靴下の引き出しを整理し直しているようなものです!

継承されたメソッド

EnumMapは、親クラスからメソッドを継承しています。以下は、いくつかの便利なメソッドです:

メソッド 継承元 説明
clone() AbstractMap このマップの浅いコピーを作成します
equals(Object o) AbstractMap 指定されたオブジェクトとこのマップが等しいかどうかを比較します
hashCode() AbstractMap このマップのハッシュコード値を返します
toString() AbstractMap このマップの文字列表現を返します

Enumと整数のペアのEnumMapにキーと値を追加する例

次に、もう少し複雑なことを試してみましょう。列挙型をキーとして、整数を値として使うEnumMapを作成します:

enum Fruit { APPLE, BANANA, ORANGE, MANGO }

EnumMap<Fruit, Integer> fruitPrices = new EnumMap<>(Fruit.class);

// キーと値のペアを追加
fruitPrices.put(Fruit.APPLE, 100);
fruitPrices.put(Fruit.BANANA, 80);
fruitPrices.put(Fruit.ORANGE, 120);
fruitPrices.put(Fruit.MANGO, 150);

// EnumMapを出力
System.out.println("果物の価格:" + fruitPrices);

// 値を更新
fruitPrices.put(Fruit.BANANA, 90);

// 特定の値を取得
int applePrice = fruitPrices.get(Fruit.APPLE);
System.out.println("アップルの価格:" + applePrice);

// EnumMapを反復処理
for (Map.Entry<Fruit, Integer> entry : fruitPrices.entrySet()) {
System.out.println(entry.getKey() + ": $" + entry.getValue());
}

この例では、果物の価格リストを作成しています。異なる果物に価格を追加し、バナナの価格を更新し、アップルの価格を取得し、最後にすべての果物の価格を出力するためにマップ全体を反復処理します。

そして、それで完成です!JavaのEnumMapクラスの基本を学びました。覚えるということは実践です。これらの概念を実験してみてください。誰しもがEnumMapで人生を整理することができるかもしれません!(冗談ですが、それでもとても便利です。)

幸せなコーディングをお願いし、常に整理整頓されたEnumMapがあるように!

Credits: Image by storyset