java EnumMap和EnumSet
2021/4/9 22:28:16
本文主要是介绍java EnumMap和EnumSet,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
EnuMap介绍
EnumMap
的类定义为:
Class EnumMap<K extends Enum<K>,V>
其中K extends Enum<K>
代表的是enum
枚举类。EnumMap
是将枚举类型作为Key
的Map
的特殊实现。Map
有着弱一致性,这意味着迭代时如果对集合进行修改不会抛出ConcurrentModificationException
异常,但是迭代时进行的修改对迭代本身是不可见的。EnumMap
的key
不能为null
,但是value
可以为null
。
定义如下枚举类型:
enum City { BEIJING("BeiJing"), SHANGHAI("ShangHai"), TIANJIN("TianJin"), SHENZHEN("ShenZhen"); private final String value; City(String value) { this.value = value; } public String getCityName() { return this.value; } }
则可以创建对应的EnumMap
对象并进行操作:
Map<City, Integer> map = new EnumMap<>(City.class); map.put(City.SHENZHEN, 1); map.computeIfAbsent(City.BEIJING, Object::hashCode);
EnumMap
不是线程安全的,因此如果有多个线程对同一EnumMap
对象进行操作时会出现冲突,但是可以使用Collections.synchronizedMap(new EnumMap(...))
包装类将EnumMap
改造成一个可以同步的Map
。
在对EnumMap
中的元素进行迭代时,keySet()
,entrySet()
和values()
方法返回的元素顺序都是以键的自然顺序进行排列的。
EnumSet介绍:
EnumSet
是Set
针对枚举类型的特殊实现,其内部是以比特向量表示的,因此在插入,删除和比较操作上都是非常快速的,甚至批量操作也是非常快速的(比如containsAll
和retainAll
)。
EnumSet
也不是线程安全的。EnumSet
并不能通过构造方法创建对象,相应的EnumSet
提供了一些静态方法用于创建EnumSet
的实例:
// 创建EnumSet对象,含有City中的所有值; Set<City> set1 = EnumSet.allOf(City.class); // 创建EnumSet对象,不含有City中的任何值: Set<City> set2 = EnumSet.noneOf(City.class); // 创建EnumSet对象,其中的元素与传入的EnumSet互斥 Set<City> set3 = EnumSet.complementOf((EnumSet<City>) set2); // 创建EnumSet对象,其中的元素与传入的EnumSet对象中的元素一致 Set<City> set4 = EnumSet.copyOf((EnumSet<City>) set); // 创建EnumSet对象,其中只含有City.BEIJING这一个元素 Set<City> set5 = EnumSet.of(City.BEIJING); // 创建EnumSet对象,其中含有元素City.BEIJING,City.SHANGHAI,City.SHENZHEN这三个元素 Set<City> set6 = EnumSet.of(City.BEIJING, City.SHANGHAI, City.SHENZHEN);
这篇关于java EnumMap和EnumSet的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门
- 2024-12-27JWT单点登录原理学习入门