Java中EnumMap和EnumSet枚舉操作類(lèi)的簡(jiǎn)單使用詳解
EnumMap
這個(gè)類(lèi),1.5就出了,繼承AbstractMap,說(shuō)白了就是個(gè)map,只是他的key是枚舉: Enummap也是線(xiàn)程不安全的,內(nèi)部實(shí)現(xiàn)了迭代器,如果有線(xiàn)程安全問(wèn)題,記得轉(zhuǎn)迭代器,使用這個(gè)方法轉(zhuǎn)就好enumMap.entrySet().iterator():
使用就是直接當(dāng)做map就好了,為啥要使用這個(gè)類(lèi),很簡(jiǎn)單,快,進(jìn)行了部分優(yōu)化,所以當(dāng)key為枚舉的時(shí)候盡量使用這個(gè)類(lèi):
@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枚舉類(lèi)的全部枚舉值 EnumSet es = EnumSet.allOf(Season.class); System.out.println(es); //創(chuàng)建一個(gè)EnumSet空集合,只頂其集合元素是Season類(lèi)的枚舉值 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集合元素類(lèi)型相同, es4元素+es5元素=Sesson枚舉的全部枚舉值 EnumSet es5 = EnumSet.complementOf(es4); System.out.println(es5);//輸出[SPRING] }
執(zhí)行結(jié)果:
其他方法就很簡(jiǎn)單,跟set一樣,只不過(guò)還是對(duì)枚舉有優(yōu)化;所以,如果有枚舉set盡量使用這兩個(gè)類(lèi)
到此這篇關(guān)于Java中EnumMap和EnumSet枚舉操作類(lèi)的簡(jiǎn)單使用詳解的文章就介紹到這了,更多相關(guān)EnumMap和EnumSet枚舉操作類(lèi)的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springSecurity之AuthenticationProvider用法解析
這篇文章主要介紹了springSecurity之AuthenticationProvider用法解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03FeignClient服務(wù)器拋出異常客戶(hù)端處理方案
這篇文章主要介紹了FeignClient服務(wù)器拋出異??蛻?hù)端處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06java調(diào)用微信接口實(shí)現(xiàn)網(wǎng)頁(yè)分享小功能
這篇文章主要為大家詳細(xì)介紹了java調(diào)用微信接口實(shí)現(xiàn)網(wǎng)頁(yè)分享小功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-0410分鐘帶你徒手寫(xiě)個(gè)Java線(xiàn)程池
我們自己手動(dòng)實(shí)現(xiàn)的線(xiàn)程池要比Java自身的線(xiàn)程池簡(jiǎn)單的多,我們?nèi)サ袅烁鞣N復(fù)雜的處理方式,只保留了最核心的原理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-04-04利用Socket.io 實(shí)現(xiàn)消息實(shí)時(shí)推送功能
這篇文章主要介紹了利用Socket.io 實(shí)現(xiàn)消息實(shí)時(shí)推送功能,需要的朋友可以參考下2017-12-12Java數(shù)據(jù)結(jié)構(gòu)之雙端鏈表原理與實(shí)現(xiàn)方法
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之雙端鏈表原理與實(shí)現(xiàn)方法,簡(jiǎn)單描述了雙端鏈表的概念、原理并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)雙端鏈表的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10Java數(shù)組,去掉重復(fù)值、增加、刪除數(shù)組元素的方法
下面小編就為大家?guī)?lái)一篇Java數(shù)組,去掉重復(fù)值、增加、刪除數(shù)組元素的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10