Java 菜鳥(niǎo)教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊(duì)列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java EnumMap

在本教程中,我們將借助示例學(xué)習(xí)Java EnumMap類(lèi)及其操作。

Java集合框架的EnumMap類(lèi)為枚舉的元素提供了映射實(shí)現(xiàn)。

在EnumMap中,枚舉元素用作。它實(shí)現(xiàn)了Map接口。

Java EnumMap實(shí)現(xiàn)Map接口。

在學(xué)習(xí)之前EnumMap,請(qǐng)確保了解Java枚舉。

創(chuàng)建一個(gè)EnumMap

為了創(chuàng)建一個(gè)枚舉映射,我們必須首先導(dǎo)入java.util.EnumMap包。導(dǎo)入包后,就可以使用Java創(chuàng)建枚舉映射。

enum Size {
    SMALL, MEDIUM, LARGE, EXTRALARGE
}

EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);

在上面的示例中,我們創(chuàng)建了一個(gè)名為sizes的枚舉映射。

這里,

  • Size - 映射到值的枚舉的

  • Integer- 與相應(yīng)鍵相關(guān)聯(lián)的枚舉映射的

EnumMap的方法

EnumMap類(lèi)提供了一些方法,允許我們對(duì)枚舉映射執(zhí)行各種元素。

將元素插入EnumMap

  • put() - 將指定的鍵/值映射(條目)插入到枚舉映射中

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

例如,

import java.util.EnumMap;

class Main {

    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    public static void main(String[] args) {

        //創(chuàng)建一個(gè)為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);
    }
}

輸出結(jié)果

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

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

還可以使用putAll()將其他映射(如HashMap、TreeMap等)中的元素插入到枚舉映射中。但是,所有的映射應(yīng)該具有相同的枚舉類(lèi)型。

訪(fǎng)問(wèn)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) {

        // 創(chuàng)建Size枚舉的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("Key/Value 映射: " + sizes.entrySet());

        // 使用 keySet() 方法
        System.out.println("Keys: " + sizes.keySet());

        // 使用 values() 方法
        System.out.println("Values: " + sizes.values());
    }
}

輸出結(jié)果

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()方法返回與指定鍵關(guān)聯(lián)的值。如果找不到指定的鍵,則返回null。

例如,

import java.util.EnumMap;

class Main {

    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    public static void main(String[] args) {

        // 創(chuàng)建Size枚舉的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("Value of MEDIUM: " + value);
    }
}

輸出結(jié)果

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

刪除EnumMap元素

  • remove(key) - 返回并從映射中刪除與指定鍵關(guān)聯(lián)的條目

  • remove(key, value) - 僅當(dāng)指定鍵映射到指定值并返回布爾值時(shí),才從映射中刪除條目

例如,

import java.util.EnumMap;

class Main {

    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    public static void main(String[] args) {

        // 創(chuàng)建Size枚舉的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);
    }
}

輸出結(jié)果

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

替換 EnumMap 元素

  • replace(key, value) - 將鍵key關(guān)聯(lián)的值替換為value

  • replace(key, old, new) -  僅當(dāng)old值已與指定鍵key關(guān)聯(lián)時(shí),才用new值替換old值

  • replaceAll(function) - 用指定函數(shù)的結(jié)果替換映射的每個(gè)值

import java.util.EnumMap;

class Main {

    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    public static void main(String[] args) {

        // 創(chuàng)建Size枚舉的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("EnumMap 使用方法 replace(): " + sizes);

        // 使用 replaceAll() 方法
        sizes.replaceAll((key, oldValue) -> oldValue + 3);
        System.out.println("EnumMap 使用方法 replaceAll(): " + sizes);
    }
}

輸出結(jié)果

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

在上面的程序中,請(qǐng)注意以下語(yǔ)句

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

在此,該方法訪(fǎng)問(wèn)map的所有條目。然后,它將所有值替換為lambda表達(dá)式提供的新值。

其他方法

方法描述
clone()創(chuàng)建副本 EnumMap
containsKey()搜索EnumMap指定的鍵,并返回布爾結(jié)果
containsValue()在中搜索EnumMap指定的值并返回布爾結(jié)果
size()返回的大小 EnumMap
clear()從中刪除所有條目 EnumMap

EnumSet與 EnumMap 的區(qū)別

EnumSet和EnumMap類(lèi)都提供了存儲(chǔ)枚舉值的數(shù)據(jù)結(jié)構(gòu)。然而,它們之間存在著一些主要的區(qū)別。

  • 枚舉集合在內(nèi)部以位序列表示,而枚舉映射在內(nèi)部以數(shù)組表示。

  • Enum集合是使用預(yù)定義的方法創(chuàng)建的,如allOf()、noneOf()、of()等。但是,枚舉映射是使用其構(gòu)造函數(shù)創(chuàng)建的。

Cloneable 和 Serializable的接口

EnumMap類(lèi)還實(shí)現(xiàn)了Cloneable和Serializable接口。

Cloneable 克隆接口

它允許EnumMap類(lèi)復(fù)制類(lèi)的實(shí)例。

Serializable 可序列化的接口

每當(dāng)需要通過(guò)網(wǎng)絡(luò)傳輸Java對(duì)象時(shí),就需要將對(duì)象轉(zhuǎn)換為位或字節(jié)。這是因?yàn)镴ava對(duì)象無(wú)法通過(guò)網(wǎng)絡(luò)傳輸。

Serializable接口允許類(lèi)被序列化。這意味著Serializable可以將實(shí)現(xiàn)的類(lèi)的對(duì)象轉(zhuǎn)換為位或字節(jié)。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清