欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解Java中的EnumMap和EnumSet

 更新時間:2023年11月08日 10:19:45   作者:flydean程序那些事  
這篇文章主要介紹了深入理解Java中的EnumMap和EnumSet,一般來說我們會選擇使用HashMap來存儲key-value格式的數(shù)據,考慮這樣的特殊情況,一個HashMap的key都來自于一個Enum類,這樣的情況則可以考慮使用本文要講的EnumMap,需要的朋友可以參考下

簡介

一般來說我們會選擇使用HashMap來存儲key-value格式的數(shù)據,考慮這樣的特殊情況,一個HashMap的key都來自于一個Enum類,這樣的情況則可以考慮使用本文要講的EnumMap。

EnumMap

先看一下EnumMap的定義和HashMap定義的比較:

public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
    implements java.io.Serializable, Cloneable
public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable 

我們可以看到EnumMap幾乎和HashMap是一樣的,區(qū)別在于EnumMap的key是一個Enum。

下面看一個簡單的使用的例子:

先定義一個Enum:

public enum Types {
    RED, GREEN, BLACK, YELLO
}

再看下怎么使用EnumMap:

    @Test
    public void useEnumMap(){
        EnumMap<Types, String> activityMap = new EnumMap<>(Types.class);
        activityMap.put(Types.BLACK,"black");
        activityMap.put(Types.GREEN,"green");
        activityMap.put(Types.RED,"red");
    }

其他的操作其實和hashMap是類似的,我們這里就不多講了。

什么時候使用EnumMap

因為在EnumMap中,所有的key的可能值在創(chuàng)建的時候已經知道了,所以使用EnumMap和hashMap相比,可以提升效率。

同時,因為key比較簡單,所以EnumMap在實現(xiàn)中,也不需要像HashMap那樣考慮一些復雜的情況。

EnumSet

跟EnumMap很類似,EnumSet是一個set,然后set中的元素都是某個Enum類型。

EnumSet是一個interface而不是一個類,要創(chuàng)建EnumSet類可以使用EnumSet提供的兩個靜態(tài)方法,noneOf和allOf。

先看一個noneOf:

    public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {
        Enum<?>[] universe = getUniverse(elementType);
        if (universe == null)
            throw new ClassCastException(elementType + " not an enum");

        if (universe.length <= 64)
            return new RegularEnumSet<>(elementType, universe);
        else
            return new JumboEnumSet<>(elementType, universe);
    }

noneOf傳入一個Enum類,返回一個空的Enum類型的EnumSet。

從上面的代碼我們可以看到EnumSet有兩個實現(xiàn),長度大于64的時候使用JumboEnumSet,小有64的時候使用RegularEnumSet。

注意,JumboEnumSet和RegularEnumSet不建議直接使用,他是內部使用的類。

再看一下allOf:

public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType) {
        EnumSet<E> result = noneOf(elementType);
        result.addAll();
        return result;
    }

allOf很簡單,先調用noneOf創(chuàng)建空的set,然后調用addAll方法將所有的元素添加進去。

總結

EnumMap和EnumSet對特定的Enum對象做了優(yōu)化,可以在合適的情況下使用。

到此這篇關于深入理解Java中的EnumMap和EnumSet的文章就介紹到這了,更多相關EnumMap和EnumSet內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java項目中常用指標UV?PV?QPS?TPS含義以及統(tǒng)計方法

    java項目中常用指標UV?PV?QPS?TPS含義以及統(tǒng)計方法

    文章介紹了現(xiàn)代Web應用中性能監(jiān)控和分析的重要性,涵蓋了UV、PV、QPS、TPS等關鍵指標的統(tǒng)計方法,并提供了示例代碼,同時,文章還討論了性能優(yōu)化和瓶頸分析的策略,以及使用Grafana等可視化工具進行監(jiān)控與告警的重要性
    2025-01-01
  • Java?jar打包成exe應用程序的詳細步驟

    Java?jar打包成exe應用程序的詳細步驟

    本文主要介紹了Java?jar打包成exe應用程序的詳細步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 一篇文章帶你入門Java修飾符

    一篇文章帶你入門Java修飾符

    Java語言提供了很多修飾符,主要分為以下兩類:訪問修飾符;非訪問修飾符。修飾符用來定義類、方法或者變量,通常放在語句的最前端。我們通過下面的例子來說明,下面就跟小編一起來看下吧
    2021-08-08
  • 深入理解Java定時調度(Timer)機制

    深入理解Java定時調度(Timer)機制

    這篇文章主要介紹了深入理解Java定時調度(Timer)機制,本節(jié)我們主要分析 Timer 的功能。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 基于Netty實現(xiàn)WebSocket的常用處理器及區(qū)別解析

    基于Netty實現(xiàn)WebSocket的常用處理器及區(qū)別解析

    文章介紹了Netty中的ChannelInboundHandlerAdapter和SimpleChannelInboundHandler處理器,以及WebSocket的幾種常見幀類型,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-02-02
  • 靜態(tài)方法中調用Spring注入過程解析

    靜態(tài)方法中調用Spring注入過程解析

    這篇文章主要介紹了靜態(tài)方法中調用Spring注入過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • java簡單實現(xiàn)自定義日歷

    java簡單實現(xiàn)自定義日歷

    這篇文章主要為大家詳細介紹了java簡單實現(xiàn)自定義日歷,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java實現(xiàn)簡易拼圖游戲的方法詳解

    Java實現(xiàn)簡易拼圖游戲的方法詳解

    這篇文章主要介紹了如何利用Java語言實現(xiàn)簡易拼圖游戲,幫助大家更好的理解和使用Java開發(fā)游戲,感興趣的朋友可以跟隨小編一起學習一下
    2022-05-05
  • Mac OS上安裝Tomcat服務器的簡單步驟

    Mac OS上安裝Tomcat服務器的簡單步驟

    這篇文章主要介紹了Mac OS上安裝Tomcat服務器的簡單步驟,包括簡單的啟動命令和查看Tomcat信息的方法,需要的朋友可以參考下
    2015-11-11
  • Jlabel實現(xiàn)內容自動換行簡單實例

    Jlabel實現(xiàn)內容自動換行簡單實例

    這篇文章主要介紹了Jlabel實現(xiàn)內容自動換行簡單實例,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01

最新評論