English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java Grund教程

Java Flusskontrolle

Java Array

Java objektorientiert(I)

Java objektorientiert(II)

Java objektorientiert(III)

Java Ausnahmebehandlung

Java 列表(List)

Java Queue(队列)

Java Map集合

Java Set集合

Java 输入输出(I/O)

Java Reader/Writer

Java 其他主题

Java EnumMap

在本教程中,我们将借助示例学习Java EnumMap类及其操作。

Java集合框架的EnumMap类为枚举的元素提供了映射实现。

在EnumMap中,枚举元素用作。它实现了Map接口

在学习EnumMap之前,请确保了解Java Enum

创建一个EnumMap

为了创建一个枚举映射,我们必须首先导入java.util.EnumMap包。导入包后,就可以使用Java创建枚举映射。

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

在上面的示例中,我们创建了一个名为sizes的枚举映射。

这里,

  • Size - 映射到值的枚举的

  • Integer- 与相应键相关联的枚举映射的

EnumMap的方法

EnumMap类提供了一些方法,允许我们对枚举映射执行各种元素。

将元素插入EnumMap

  • put() - 将指定的键/值映射(条目)插入到枚举映射中

  • putAll() - 将指定映射的所有条目插入此映射

例如,

import java.util.EnumMap;
class Main {
    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    public static void main(String[] args) {
        //创建一个为size枚举的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);
    }
}

Ausgaberesultat

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

在上面的示例中,我们使用putAll()方法将枚举映射size1的所有元素插入到size2的枚举映射中。

还可以使用putAll()将其他映射(如HashMap、TreeMap等)中的元素插入到枚举映射中。但是,所有的映射应该具有相同的枚举类型。

访问EnumMap元素

1使用entrySet()、keySet()和values()

  • entrySet() - 返回枚举映射的所有键/值映射(条目)的集合

  • keySet() - 返回枚举映射的所有键的集合

  • values() - 返回枚举映射的所有值的集合

例如,

import java.util.EnumMap;
class Main {
    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    public static void main(String[] args) {
        // EnumMap für die Size-Enum erstellen
        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("Key/Value 映射: + sizes.entrySet());
        // 使用 keySet() 方法
        System.out.println("Keys: ", + sizes.keySet());
        // 使用 values() 方法
        System.out.println("Values: ", + sizes.values());
    }
}

Ausgaberesultat

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
Key/Value 映射: [SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40]
Keys: [SMALL, MEDIUM, LARGE, EXTRALARGE]
Values: [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) {
        // EnumMap für die Size-Enum erstellen
        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("Value of MEDIUM: ", + value);
    }
}

Ausgaberesultat

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
Value of MEDIUM: 32

删除EnumMap元素

  • remove(key) - 返回并从映射中删除与指定键关联的条目

  • remove(key, value) - 仅当指定键映射到指定值并返回布尔值时,才从映射中删除条目

例如,

import java.util.EnumMap;
class Main {
    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    public static void main(String[] args) {
        // EnumMap für die Size-Enum erstellen
        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);
    }
}

Ausgaberesultat

EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40}
删除值: 32
条目 {SMALL=28} 被删除? True
更新后的EnumMap: {LARGE=36, EXTRALARGE=40}

替换 EnumMap 元素

  • replace(key, value) - 将键key关联的值替换为value

  • replace(key, old, new) -  仅当old值已与指定键key关联时,才用new值替换old值

  • replaceAll(function) - 使用指定函数的结果替换映射的每个值

import java.util.EnumMap;
class Main {
    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    public static void main(String[] args) {
        // EnumMap für die Size-Enum erstellen
        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);
        // Verwendung der Methode replace()
        sizes.replace(Size.MEDIUM, 30);
        sizes.replace(Size.LARGE, 36, 34);
        System.out.println("EnumMap Verwendung von replace(): " + sizes);
        // Verwendung der Methode replaceAll()
        sizes.replaceAll((key, oldValue) -> oldValue + 3);
        System.out.println("EnumMap Verwendung von replaceAll(): " + sizes);
    }
}

Ausgaberesultat

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

Beachten Sie im obigen Programm die folgenden Anweisungen

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

Hier greift diese Methode auf alle Einträge der Map zu. Anschließend ersetzt sie alle Werte durchLambda-AusdruckNeue Werte bereitstellen.

Andere Methoden

MethodeBeschreibung
clone()Kopie von EnumMap erstellen
containsKey()Sucht den von EnumMap angegebenen Schlüssel und gibt ein boolesches Ergebnis zurück
containsValue()Sucht den von EnumMap angegebenen Wert und gibt ein boolesches Ergebnis zurück
size()Die Größe von EnumMap zurückgeben
clear()Alle Einträge aus EnumMap entfernen

Unterschied zwischen EnumSet und EnumMap

EnumSetUnd die EnumMap-Klasse bieten beide Datenstrukturen zur Speicherung von Enum-Werten. Allerdings gibt es zwischen ihnen einige Hauptunterschiede.

  • Enum-Sets werden intern als Bit-Sequenz dargestellt, während Enum-Mappings intern als Array dargestellt werden.

  • Enum-Sets werden mit vorgegebenen Methoden erstellt, wie z.B. allOf(), noneOf(), of() usw. Enum-Mappings werden jedoch mit ihrem Konstruktor erstellt.

Cloneable und Serializable Schnittstellen

Die EnumMap-Klasse implementiert ebenfalls die Schnittstellen Cloneable und Serializable.

Cloneable KlonenSchnittstelle

Es ermöglicht es der EnumMap-Klasse, Instanzen der Klasse zu kopieren.

Serializable serialisierbare Schnittstelle

Jedes Mal, wenn ein Java-Objekt über das Netzwerk übertragen werden muss, muss das Objekt in Bits oder Bytes umgewandelt werden. Dies liegt daran, dass Java-Objekte nicht über das Netzwerk übertragen werden können.

Das Serializable Interface ermöglicht es einer Klasse, Objekte zu serialisieren. Dies bedeutet, dass Serializable die Objekte der implementierten Klasse in Bits oder Bytes umwandeln kann.