Java中EnumMap和EnumSet枚舉操作類的簡(jiǎn)單使用詳解
EnumMap
這個(gè)類,1.5就出了,繼承AbstractMap,說(shuō)白了就是個(gè)map,只是他的key是枚舉: Enummap也是線程不安全的,內(nèi)部實(shí)現(xiàn)了迭代器,如果有線程安全問(wèn)題,記得轉(zhuǎn)迭代器,使用這個(gè)方法轉(zhuǎn)就好enumMap.entrySet().iterator():


使用就是直接當(dāng)做map就好了,為啥要使用這個(gè)類,很簡(jiǎn)單,快,進(jìn)行了部分優(yōu)化,所以當(dāng)key為枚舉的時(shí)候盡量使用這個(gè)類:
@org.junit.Test
public void test2() {
EnumMap<Season, String> enumMap = new EnumMap<>(Season.class);
HashMap<Season, String> aaa = new HashMap();
enumMap.put(Season.SPRING, "春天");
enumMap.put(Season.SUMMER, "夏天");
enumMap.put(Season.AUTUMN, "秋天");
enumMap.put(Season.WINTER, "冬天");
System.out.println(enumMap);
aaa.put(Season.SPRING, "春天");
aaa.put(Season.SUMMER, "夏天");
aaa.put(Season.AUTUMN, "秋天");
aaa.put(Season.WINTER, "冬天");
System.out.println(aaa);
}
enum Season {
SPRING, SUMMER, AUTUMN, WINTER;
}
性能比較測(cè)試:
@org.junit.Test
public void test3() {
EnumMap<Season, String> enumMap = new EnumMap<>(Season.class);
HashMap<Season, String> aaa = new HashMap();
long l = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
enumMap.put(Season.SPRING, "春天");
enumMap.put(Season.SUMMER, "夏天");
enumMap.put(Season.AUTUMN, "秋天");
enumMap.put(Season.WINTER, "冬天");
enumMap.remove(Season.SPRING);
enumMap.remove(Season.SUMMER);
enumMap.remove(Season.AUTUMN);
enumMap.remove(Season.WINTER);
}
long l2 = System.currentTimeMillis();
System.out.println(l2 - l);
long l3 = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
aaa.put(Season.SPRING, "春天");
aaa.put(Season.SUMMER, "夏天");
aaa.put(Season.AUTUMN, "秋天");
aaa.put(Season.WINTER, "冬天");
aaa.remove(Season.SPRING);
aaa.remove(Season.SUMMER);
aaa.remove(Season.AUTUMN);
aaa.remove(Season.WINTER);
}
long l4 = System.currentTimeMillis();
System.out.println(l4 - l3);
}執(zhí)行結(jié)果:快樂(lè)一倍左右吧

EnumSet
跟enummap差不多,大部分方法跟Set差不多,只不過(guò)構(gòu)建方法加了很多:

提供了很多靜態(tài)的構(gòu)建方法:

簡(jiǎn)單的構(gòu)建方法測(cè)試:
@org.junit.Test
public void test1() {
//創(chuàng)建一個(gè)EnumSet集合,集合元素就是Season枚舉類的全部枚舉值
EnumSet es = EnumSet.allOf(Season.class);
System.out.println(es);
//創(chuàng)建一個(gè)EnumSet空集合,只頂其集合元素是Season類的枚舉值
EnumSet es2 = EnumSet.noneOf(Season.class);
System.out.println(es2);
//以枚舉值來(lái)創(chuàng)建EnumSet集合
EnumSet es3 = EnumSet.of(Season.SUMMER, Season.WINTER);
System.out.println(es3); //輸出[SUMMER, WINTER]
//創(chuàng)建一個(gè)包含Season枚舉值從SUMMER到WINTER的EnumSet集合
EnumSet es4 = EnumSet.range(Season.SUMMER, Season.WINTER);
System.out.println(es4);//輸出[SUMMER, Fall, WINTER]
//創(chuàng)建一個(gè)EnumSet集合,其元素和es4集合元素類型相同, es4元素+es5元素=Sesson枚舉的全部枚舉值
EnumSet es5 = EnumSet.complementOf(es4);
System.out.println(es5);//輸出[SPRING]
}
執(zhí)行結(jié)果:

其他方法就很簡(jiǎn)單,跟set一樣,只不過(guò)還是對(duì)枚舉有優(yōu)化;所以,如果有枚舉set盡量使用這兩個(gè)類
到此這篇關(guān)于Java中EnumMap和EnumSet枚舉操作類的簡(jiǎn)單使用詳解的文章就介紹到這了,更多相關(guān)EnumMap和EnumSet枚舉操作類的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Cloud Stream微服務(wù)消息框架原理及實(shí)例解析
這篇文章主要介紹了Spring Cloud Stream微服務(wù)消息框架原理及實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
不使用myeclipse注冊(cè)機(jī)得到myeclipse注冊(cè)碼的方法(myeclipse序列號(hào))
本文為大家介紹不使用myeclipse注冊(cè)機(jī)就能得到myeclipse注冊(cè)碼(序列號(hào))的方法, 運(yùn)行下面的JAVA代碼就可以了2014-01-01
詳解springBoot啟動(dòng)時(shí)找不到或無(wú)法加載主類解決辦法
這篇文章主要介紹了詳解springBoot啟動(dòng)時(shí)找不到或無(wú)法加載主類解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
SpringBoot讀取資源目錄中JSON文件的方法實(shí)例
最近做項(xiàng)目遇到需要將json類型的配置文件引用到項(xiàng)目中,已經(jīng)將讀取json文件的方法封裝成工具類,下面這篇文章主要給大家介紹了關(guān)于SpringBoot讀取資源目錄中JSON文件的相關(guān)資料,需要的朋友可以參考下2023-04-04
Flowable整合SpringBoot實(shí)現(xiàn)的示例代碼
本文詳細(xì)介紹了如何在SpringBoot項(xiàng)目中整合Flowable進(jìn)行工作流管理,包括依賴引入、流程部署與啟動(dòng)、表結(jié)構(gòu)、流程掛起和激活以及任務(wù)分配等關(guān)鍵操作,具有一定的參考價(jià)值,感興趣的可以了解一下2024-09-09
Spring注解@Autowired和@Resource的區(qū)別詳解
這篇文章主要介紹了Spring注解@Autowired和@Resource的區(qū)別詳解,@Autowired與@Resource都可以用來(lái)裝配bean,都可以寫在字段或setter方法上,@Resource是JDK提供的注解,默認(rèn)按照名稱進(jìn)行裝配,名稱可通過(guò)name屬性進(jìn)行指定,需要的朋友可以參考下2023-12-12
詳解Springboot應(yīng)用中設(shè)置Cookie的SameSite屬性
Chrome 51 開始,瀏覽器的 Cookie 新增加了一個(gè)SameSite屬性,用來(lái)防止 CSRF 攻擊和用戶追蹤。今天通過(guò)本文給大家介紹Springboot應(yīng)用中設(shè)置Cookie的SameSite屬性,感興趣的朋友一起看看吧2022-01-01

