ホームページ  >  記事  >  Java  >  Java で EnumMap 関数を使用して列挙型マッピング操作を行う方法

Java で EnumMap 関数を使用して列挙型マッピング操作を行う方法

WBOY
WBOYオリジナル
2023-06-26 18:23:562063ブラウズ

Java では、Enum 型は列挙定数を表すために使用できる非常に便利なデータ型です。 EnumMap は Java の特殊な Map 実装であり、Enum 型のキーと値のペアのみを格納できます。この記事では、EnumMap 関数の使用方法と、Java で EnumMap を使用して列挙型マッピング操作を行う方法を紹介します。

  1. EnumMap 関数の基本的な使用法

EnumMap5020972f684133d4ac6a4986ae645516, V> は Java のジェネリック クラスで、K は列挙型 Key を表します。 V はキーにマップされた値を表します。 EnumMap の作成後、そのキーは同じ列挙型から取得され、すべての値が同じ型である必要があります。 EnumMap 関数の基本的な使用法は次のとおりです。

EnumMap<Weekday, String> enumMap = new EnumMap<>(Weekday.class);
enumMap.put(Weekday.MONDAY, "星期一");
enumMap.put(Weekday.TUESDAY, "星期二");
enumMap.put(Weekday.WEDNESDAY, "星期三");
enumMap.put(Weekday.THURSDAY, "星期四");
enumMap.put(Weekday.FRIDAY, "星期五");
enumMap.put(Weekday.SATURDAY, "星期六");
enumMap.put(Weekday.SUNDAY, "星期日");

最初に EnumMap オブジェクト enumMap を作成し、EnumMap の put メソッドを通じて各曜日と対応する中国語名を EnumMap に格納します。このようにして、基本的な EnumMap の作成と初期化が完了しました。

  1. EnumMap 関数の初期化

上記のコード例では、すべての値を自動的に null に初期化する EnumMap のデフォルト コンストラクターを使用します。実際、初期化に EnumMap の別のコンストラクターを使用することもできます。このコンストラクターは初期値を設定し、EnumMap 内のすべての値をこの初期値に初期化します。以下は、EnumMap 関数の初期化サンプル コードです。

EnumMap<Weekday, String> enumMap = new EnumMap<>(Weekday.class);
enumMap.put(Weekday.MONDAY, "星期一");
enumMap.put(Weekday.TUESDAY, "星期二");
enumMap.put(Weekday.WEDNESDAY, "星期三");
enumMap.put(Weekday.THURSDAY, "星期四");
enumMap.put(Weekday.FRIDAY, "星期五");
enumMap.put(Weekday.SATURDAY, "星期六");
enumMap.put(Weekday.SUNDAY, "星期日");

// 使用初始化值,将所有键值对的值都设置为"假期" 
EnumMap defaultEnumMap = new EnumMap<>(Weekday.class);
defaultEnumMap.putAll(Collections.singletonMap(null, "假期"));
EnumMap enumMapWithDefaultValue = new EnumMap<>(defaultEnumMap);
enumMapWithDefaultValue.putAll(enumMap);

上記のサンプル コードでは、Collections.singletonMap メソッドを使用して、キーと値のペアを 1 つだけ含むマップを作成しました。そのキーは null で、そのペアは値は「休日」です。次に、この Map を初期値として使用し、新しい EnumMap オブジェクト enumMapWithDefaultValue を作成し、以前に作成した enumMap 内のキーと値のペアをこの新しい EnumMap オブジェクトにコピーします。

このサンプル コードでは、EnumMap コンストラクターを使用して初期化する方法と、別の Map を初期値として使用して新しい EnumMap を作成する方法を理解できます。

  1. EnumMap 関数の走査

EnumMap 内のすべての要素の走査は、通常、必須の操作です。 Java でイテレータを使用すると、この操作を実現できます。以下は、EnumMap を走査するためのサンプル コードです。

EnumMap<Weekday, String> enumMap = new EnumMap<>(Weekday.class);
enumMap.put(Weekday.MONDAY, "星期一");
enumMap.put(Weekday.TUESDAY, "星期二");
enumMap.put(Weekday.WEDNESDAY, "星期三");
enumMap.put(Weekday.THURSDAY, "星期四");
enumMap.put(Weekday.FRIDAY, "星期五");
enumMap.put(Weekday.SATURDAY, "星期六");
enumMap.put(Weekday.SUNDAY, "星期日");

// 使用迭代器遍历EnumMap中的所有键值对
Iterator> iterator = enumMap.entrySet().iterator();
while (iterator.hasNext()) {
    Map.Entry entry = iterator.next();
    Weekday key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + ": " + value);
}

// 使用foreach循环遍历EnumMap中的所有值
for (String value : enumMap.values()) {
    System.out.println(value);
}

このサンプル コードでは、Java のイテレータを使用して、EnumMap 内のすべてのキーと値のペアを走査します。まず EnumMap のentrySet を取得し、次に、entrySet によって返されたイテレータを使用して、すべてのキーと値のペアを順番に走査します。各キーと値のペアについて、getKey メソッドを使用してキーを取得し、getValue メソッドを使用して値を取得し、コンソールに出力します。

foreach ループを使用して、EnumMap 内のすべての値を反復処理することもできます。列挙型をキーとして使用して値を取得するだけで、キーを取得するために getKey メソッドを頻繁に使用する必要がなくなります。

  1. EnumMap 関数の実践的な応用

上記で紹介した基本的な使用法に加えて、EnumMap 関数には多くの実践的な応用シナリオがあります。

4.1 列挙型マッピング操作

EnumMap の最も一般的な使用法は、列挙型を他の値にマッピングすることです。たとえば、次のサンプル コードでは、列挙型 Weekday を数値 (0 ~ 6) にマップします。

public enum Weekday {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

// 使用EnumMap将Weekday枚举映射到数字
EnumMap<Weekday, Integer> enumMap = new EnumMap<>(Weekday.class);
enumMap.put(Weekday.MONDAY, 0);
enumMap.put(Weekday.TUESDAY, 1);
enumMap.put(Weekday.WEDNESDAY, 2);
enumMap.put(Weekday.THURSDAY, 3);
enumMap.put(Weekday.FRIDAY, 4);
enumMap.put(Weekday.SATURDAY, 5);
enumMap.put(Weekday.SUNDAY, 6);

4.2 列挙型 counter

場合によっては、列挙型 counter

列挙型の数をカウントするカウンター。 EnumMap はこの機能を簡単に実装できます。サンプル コードは次のとおりです:

public enum Gender {
    MALE, FEMALE
}

// 使用EnumMap实现枚举类型计数器
EnumMap<Gender, Integer> genderCount = new EnumMap<>(Gender.class);
genderCount.put(Gender.MALE, 0);
genderCount.put(Gender.FEMALE, 0);

List<Gender> genderList = Arrays.asList(
    Gender.MALE, 
    Gender.MALE, 
    Gender.MALE, 
    Gender.FEMALE, 
    Gender.FEMALE
);

for (Gender gender : genderList) {
    genderCount.put(gender, genderCount.get(gender) + 1);
}

System.out.println("男性数量:" + genderCount.get(Gender.MALE));
System.out.println("女性数量:" + genderCount.get(Gender.FEMALE));

上記のサンプル コードでは、まず、Gender タイプの数を記録するための EnumMap オブジェクトのenderCount を作成しました。次に、EnumMap の put メソッドを使用して、各性別タイプの番号を 0 に初期化します。次に、リストを使用して性別リストをシミュレートし、リストを走査して各性別の出現数を数えます。最後に男性と女性の数を出力します。

4.3 列挙型計算機

列挙型カウンターと同様に、EnumMap を使用して列挙型の加算と減算を実装することもできます。たとえば、次のサンプル コードでは、特定の単語に特定の英語文字が出現する回数を数える簡単な計算機を実装しました。

public enum Letter {
    A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
}

// 使用EnumMap实现枚举类型计算器
EnumMap<Letter, Integer> letterCount = new EnumMap<>(Letter.class);
for (Letter letter : Letter.values()) {
    letterCount.put(letter, 0);
}

String word = "Hello, World!";
for (int i = 0; i < word.length(); i++) {
    char c = word.charAt(i);
    if (c >= 'A' && c <= 'Z') {
        Letter letter = Letter.valueOf(String.valueOf(c));
        letterCount.put(letter, letterCount.get(letter) + 1);
    }
}

for (Letter letter : Letter.values()) {
    if (letterCount.get(letter) > 0) {
        System.out.println(letter + ": " + letterCount.get(letter));
    }
}

上記のサンプル コードでは、最初に EnumMap オブジェクト LetterCount を作成しました。 、各文字の出現数を記録するために使用されます。次に、for ループを使用して Letter 列挙型を反復処理し、各文字の初期値を 0 に設定します。次に、単語をシミュレートする文字列単語を定義しました。 Word の各文字を反復処理して、それが大文字であるかどうかを判断します。大文字の場合は、Letter.valueOf メソッドを使用してそれを Letter タイプに変換し、対応する Letter タイプの数を LetterCount に蓄積します。最後に、Letter 列挙型を反復処理し、出現回数が 0 より大きい文字と対応する回数を出力します。

まとめ

###この記事では、EnumMap関数の基本的な使い方、初期化、トラバース、実践的な応用などを紹介しました。 EnumMap は Java での非常に実用的な Map 実装であり、Enum 型と組み合わせて使用​​すると、列挙型マッピング、列挙型統計、計算機、その他のアプリケーションを実装できます。 EnumMap の使い方をマスターすると、Java プログラムの開発効率とコード品質の向上に役立ちます。 ###

以上がJava で EnumMap 関数を使用して列挙型マッピング操作を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。