EnumMap
和
HashMap
都是Java中的Map实现,但它们之间存在一些关键区别。
-
键的类型:在HashMap中,键可以是任何哈希码的实例(实现了
hashCode()
方法),而在EnumMap中,键必须是枚举类型。
-
性能:EnumMap的性能通常优于HashMap,特别是在对大量数据进行查找时。这是因为在EnumMap中,键值对是按键的顺序存储的,因此查找操作的时间复杂度可以保持在O(1)。而在HashMap中,查找操作的时间复杂度是O(1)(在最佳情况下)到O(n)(在最坏情况下)。
-
内存使用:EnumMap使用更多的内存,因为它需要存储枚举类型和对应的值。HashMap使用的内存较少,因为它只需要存储键值对。
-
Null keys:HashMap允许使用null作为键,而EnumMap不允许。
-
Null values:HashMap允许使用null作为值,而EnumMap也允许。
-
遍历:在遍历操作中,EnumMap通常比HashMap慢,因为它需要遍历更多的元素。
选择使用哪种类型的Map取决于你的具体需求。如果你需要一个键是枚举类型的Map,并且性能是关键考虑因素,那么应该选择EnumMap。如果你需要一个键可以是任何类型的Map,并且内存使用是关键考虑因素,那么应该选择HashMap。
自定义
枚举
类
Enu
m 是否可以作为
HashMap
的
key
?针对这个问题,我们的答案是肯定的,至于为什么我们做如下分析。1、
Enu
m 为常量
自定义的
枚举
类为常量,我们说一个类为常量,就像是
java
.lang.String 类一样,属于final的类。2、自定义测试
Enu
m 类/**
* Created by wangyingjie1 on 2016/11/7.
public e
文章目录1、String Split2、String Equals3、Adding Strings4、List.Count() Vs List.Count Vs List.Any()
1、String Split
在C#中,共有10个Split 的重载方法
大多数开发人员使用如下方法:
var str = "Akshay|Patel";
Stopwatch sw = new Stopwatch();
sw.St
Enu
mMap
源码分析
Enu
mMap
是与
枚举
类相结合的
Map
类。跟hash没有多大关系,虽然本文中另外两种与
HashMap
有关,但是
Enu
mMap
与
HashMap
关系并不大。
Enu
mMap
就是专门与
枚举
类结合形成
Map
的
key
-value对结构。值的注意的是,
Enu
mMap
中虽然也存储的是
key
-value对的数据,但是内存实现上却采用的是数组结构。
key
存储一个数组结构,val
map
转
Enu
mMap
是指将一个普通的
Map
转换成
Enu
mMap
。转换时需要保证
Map
的
key
值是
枚举
类型,否则
会
抛出ClassCastException异常。转换的方法是使用
Enu
mMap
的构造函数,将
Map
作为参数传入即可。转换后的
Enu
mMap
的
key
值只能是
枚举
类型的
枚举
值,而且
会
按照
枚举
值的自然顺序排序。下面是一个示例代码:
Map
<String, String>
map
= new
HashMap
<>();
map
.put("SPRING", "春天");
map
.put("SUMMER", "夏天");
map
.put("FALL", "秋天");
map
.put("WINTER", "冬天");
Enu
mMap
<Season, String>
enu
mMap
= new
Enu
mMap
<>(Season.class);
for (
Map
.Entry<String, String> entry :
map
.entrySet()) {
Season season = Season.valueOf(entry.get
Key
());
enu
mMap
.put(season, entry.getValue());
System.out.println(
enu
mMap
);
这段代码将一个普通的
Map
转换成了
Enu
mMap
,并且按照
枚举
值的自然顺序排序输出了结果。