Java中EnumMap和EnumSet枚举操作类的简单使用详解
EnumMap
这个类,1.5就出了,继承AbstractMap,说白了就是个map,只是他的key是枚举: Enummap也是线程不安全的,内部实现了迭代器,如果有线程安全问题,记得转迭代器,使用这个方法转就好enumMap.entrySet().iterator():


使用就是直接当做map就好了,为啥要使用这个类,很简单,快,进行了部分优化,所以当key为枚举的时候尽量使用这个类:
@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;
}
性能比较测试:
@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);
}执行结果:快乐一倍左右吧

EnumSet
跟enummap差不多,大部分方法跟Set差不多,只不过构建方法加了很多:

提供了很多静态的构建方法:

简单的构建方法测试:
@org.junit.Test
public void test1() {
//创建一个EnumSet集合,集合元素就是Season枚举类的全部枚举值
EnumSet es = EnumSet.allOf(Season.class);
System.out.println(es);
//创建一个EnumSet空集合,只顶其集合元素是Season类的枚举值
EnumSet es2 = EnumSet.noneOf(Season.class);
System.out.println(es2);
//以枚举值来创建EnumSet集合
EnumSet es3 = EnumSet.of(Season.SUMMER, Season.WINTER);
System.out.println(es3); //输出[SUMMER, WINTER]
//创建一个包含Season枚举值从SUMMER到WINTER的EnumSet集合
EnumSet es4 = EnumSet.range(Season.SUMMER, Season.WINTER);
System.out.println(es4);//输出[SUMMER, Fall, WINTER]
//创建一个EnumSet集合,其元素和es4集合元素类型相同, es4元素+es5元素=Sesson枚举的全部枚举值
EnumSet es5 = EnumSet.complementOf(es4);
System.out.println(es5);//输出[SPRING]
}
执行结果:

其他方法就很简单,跟set一样,只不过还是对枚举有优化;所以,如果有枚举set尽量使用这两个类
到此这篇关于Java中EnumMap和EnumSet枚举操作类的简单使用详解的文章就介绍到这了,更多相关EnumMap和EnumSet枚举操作类的使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring Cloud Stream微服务消息框架原理及实例解析
这篇文章主要介绍了Spring Cloud Stream微服务消息框架原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-06-06
不使用myeclipse注册机得到myeclipse注册码的方法(myeclipse序列号)
本文为大家介绍不使用myeclipse注册机就能得到myeclipse注册码(序列号)的方法, 运行下面的JAVA代码就可以了2014-01-01
Spring注解@Autowired和@Resource的区别详解
这篇文章主要介绍了Spring注解@Autowired和@Resource的区别详解,@Autowired与@Resource都可以用来装配bean,都可以写在字段或setter方法上,@Resource是JDK提供的注解,默认按照名称进行装配,名称可通过name属性进行指定,需要的朋友可以参考下2023-12-12
详解Springboot应用中设置Cookie的SameSite属性
Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,用来防止 CSRF 攻击和用户追踪。今天通过本文给大家介绍Springboot应用中设置Cookie的SameSite属性,感兴趣的朋友一起看看吧2022-01-01


最新评论