工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java EnumMap完全マスター:Enumをキーとした効率的なマッピング

Java EnumMap

このチュートリアルでは、JavaのEnumMapクラスとその操作を例とともに学習します。

JavaコレクションフレームワークのEnumMapクラスは、enum要素のためのマップ実装を提供します。

EnumMapでは、enum要素がキーとして使用されます。Mapインターフェースを実装します。

Java EnumMap完全マスター:Enumをキーとした効率的なマッピング

EnumMapを学ぶ前に、Java Enumについて理解しておいてください。


EnumMapの作成

enumマップを作成するには、まずjava.util.EnumMapパッケージをインポートする必要があります。インポート後、以下のようにJavaでenumマップを作成できます。

enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);

上記の例では、sizesというenumマップを作成しました。

ここで、


EnumMapのメソッド

EnumMapクラスは、enumマップ上でさまざまな操作を実行するメソッドを提供します。


EnumMapへの要素挿入

例:

import java.util.EnumMap;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        // Size enumのEnumMapを作成
        EnumMap<Size, Integer> sizes1 = new EnumMap<>(Size.class);
        // put()メソッドの使用
        sizes1.put(Size.SMALL, 28);
        sizes1.put(Size.MEDIUM, 32);
        System.out.println("EnumMap1: " + sizes1);
        EnumMap<Size, Integer> sizes2 = new EnumMap<>(Size.class);
        // putAll()メソッドの使用
        sizes2.putAll(sizes1);
        sizes2.put(Size.LARGE, 36);
        System.out.println("EnumMap2: " + sizes2);
    }
}

出力

EnumMap1: {SMALL=28, MEDIUM=32}
EnumMap2: {SMALL=28, MEDIUM=32, LARGE=36}

上記例では、putAll()メソッドでenumマップsizes1のすべての要素をenumマップsizes2に挿入しました。

HashMap、TreeMapなどの他のマップからputAll()でenumマップに要素を挿入することも可能です。ただし、すべてのマップは同じenum型である必要があります。


EnumMap要素へのアクセス

1. entrySet()、keySet()、values()の使用

例:

import java.util.EnumMap;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        // Size enumのEnumMapを作成
        EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
        sizes.put(Size.SMALL, 28);
        sizes.put(Size.MEDIUM, 32);
        sizes.put(Size.LARGE, 36);
        sizes.put(Size.EXTRALARGE, 40);
        System.out.println("EnumMap: " + sizes);
        // entrySet()メソッドの使用
        System.out.println("キー/値マッピング: " + sizes.entrySet());
        // keySet()メソッドの使用
        System.out.println("キー: " + sizes.keySet());
        // values()メソッドの使用
        System.out.println("値: " + sizes.values());
    }
}

出力

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
キー/値マッピング: [SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40]
キー: [SMALL, MEDIUM, LARGE, EXTRALARGE]
値: [28, 32, 36, 40]

2. get()メソッドの使用

get()メソッドは、指定されたキーに関連付けられた値を返します。指定キーが見つからない場合はnullを返します。

例:

import java.util.EnumMap;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        // Size enumのEnumMapを作成
        EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
        sizes.put(Size.SMALL, 28);
        sizes.put(Size.MEDIUM, 32);
        sizes.put(Size.LARGE, 36);
        sizes.put(Size.EXTRALARGE, 40);
        System.out.println("EnumMap: " + sizes);
        // get()メソッドの使用
        int value = sizes.get(Size.MEDIUM);
        System.out.println("MEDIUMの値: " + value);
    }
}

出力

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
MEDIUMの値: 32

EnumMap要素の削除

例:

import java.util.EnumMap;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        // Size enumのEnumMapを作成
        EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
        sizes.put(Size.SMALL, 28);
        sizes.put(Size.MEDIUM, 32);
        sizes.put(Size.LARGE, 36);
        sizes.put(Size.EXTRALARGE, 40);
        System.out.println("EnumMap: " + sizes);
        // remove()メソッドの使用
        int value = sizes.remove(Size.MEDIUM);
        System.out.println("削除された値: " + value);
        boolean result = sizes.remove(Size.SMALL, 28);
        System.out.println("{SMALL=28}のエントリは削除されたか? " + result);
        System.out.println("更新後のEnumMap: " + sizes);
    }
}

出力

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
削除された値: 32
{SMALL=28}のエントリは削除されたか? True
更新後のEnumMap: {LARGE=36, EXTRALARGE=40}

EnumMap要素の置換

import java.util.EnumMap;
class Main {
    enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
    public static void main(String[] args) {
        // Size enumのEnumMapを作成
        EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
        sizes.put(Size.SMALL, 28);
        sizes.put(Size.MEDIUM, 32);
        sizes.put(Size.LARGE, 36);
        sizes.put(Size.EXTRALARGE, 40);
        System.out.println("EnumMap: " + sizes);
        // replace()メソッドの使用
        sizes.replace(Size.MEDIUM, 30);
        sizes.replace(Size.LARGE, 36, 34);
        System.out.println("replace()使用後のEnumMap: " + sizes);
        // replaceAll()メソッドの使用
        sizes.replaceAll((key, oldValue) -> oldValue + 3);
        System.out.println("replaceAll()使用後のEnumMap: " + sizes);
    }
}

出力

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
replace()使用後のEnumMap: {SMALL=28, MEDIUM=30, LARGE=34, EXTRALARGE=40}
replaceAll()使用後のEnumMap: {SMALL=31, MEDIUM=33, LARGE=37, EXTRALARGE=43}

上記プログラムで、以下のステートメントに注目してください:

sizes.replaceAll((key, oldValue) -> oldValue + 3);

ここでは、メソッドがマップのすべてのエントリにアクセスし、ラムダ式で提供される新しい値で全値を置換します。


その他のメソッド

メソッド説明
clone()EnumMapのコピーを作成
containsKey()指定キーをEnumMapで検索しboolean結果を返す
containsValue()指定値をEnumMapで検索しboolean結果を返す
size()EnumMapのサイズを返す
clear()EnumMapからすべてのエントリを削除

EnumSet vs EnumMap

EnumSetとEnumMapの両クラスはenum値を格納するデータ構造を提供します。しかし、いくつかの主要な違いがあります。


CloneableおよびSerializableインターフェース

EnumMapクラスはCloneableとSerializableインターフェースも実装します。

Cloneableインターフェース

クラスのインスタンスのコピーを作成することを可能にします。

Serializableインターフェース

Javaオブジェクトをネットワーク経由で送信する際、オブジェクトをビットやバイトに変換する必要があります。これはJavaオブジェクトを直接ネットワーク送信できないためです。

Serializableインターフェースはクラスの直列化を可能にします。つまり、Serializableを実装するクラスのオブジェクトをビットやバイトに変換できます。

Java

  1. C言語 列挙型(Enum)マスター: 定義・宣言・フラグ操作
  2. Java演算子をマスター:種類、構文、実践例
  3. Javaコメント:種類、使い方、ベストプラクティス
  4. Java拡張forループをマスター:構文、例、ベストプラクティス
  5. Java文字列をマスター:生成、メソッド、ベストプラクティス
  6. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  7. Java無名インナークラス完全ガイド:定義、構文、実践例
  8. Java Enum完全ガイド:列挙型とEnumクラスの活用法
  9. Java Enumコンストラクタ徹底解説:実践例で理解する
  10. Java Enumの文字列表現マスター:デフォルト、オーバーライド、高度なパターン
  11. Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法