EnumMap详解
下文笔者讲述EnumMap简介说明,如下所示
EnumMap简介
EnumMap是一个实现了Map接口的实现类 EnumMap是一个枚举类型的Map,它的Key是枚举型
创建EnumMap类的方法
创建一个枚举类型
public enum Directions {
NORTH, SOUTH, EAST, WEST
}
创建EnumMap的三种方法
//new EnumMap
EnumMap<Direction, String> enumMap = new EnumMap<>(Direction.class);
enumMap.put(Direction.EAST, "东");
enumMap.put(Direction.SOUTH, "南");
//从EnumMap复制
EnumMap<Direction, String> enumMapCopyEnumMap = new EnumMap<>(enumMap);
assertEquals(enumMap, enumMapCopyEnumMap);
//从Map复制
Map<Direction, String> hashMap = Maps.newHashMap();
hashMap.put(Direction.EAST, "东");
hashMap.put(Direction.SOUTH, "南");
EnumMap<Direction, String> enumMapCopyHashMap = new EnumMap<>(hashMap);
assertEquals(enumMap, enumMapCopyHashMap);
//方式1:
使用new EnumMap()方法时,与HashMap不同
它必须传入一个枚举的类型才能创建对象;
//方式2:
从EnumMap复制
这时传入的参数为EnumMap;
//方式3:
从Map复制
传入的参数为Map
但要求Key的类型必须是枚举型
使用Guava创建EnumMap
EnumMap<Direction, String> enumMapGuava = Maps.newEnumMap(Direction.class); enumMapGuava.put(Direction.SOUTH, "南"); assertEquals(1, enumMapGuava.size()); enumMapGuava = Maps.newEnumMap(enumMap); assertEquals(enumMap, enumMapGuava);
EnumMap基本操作分享
由于EnumMap也实现了Map接口 所以它同Map中所有方法,具体的示例如下所示例
@Test
public void operations() {
EnumMap<Direction, String> map = Maps.newEnumMap(Direction.class);
//增加
map.put(Direction.EAST, "东");
map.put(Direction.SOUTH, "南");
map.put(Direction.WEST, "西");
//查询
assertTrue(map.containsKey(Direction.EAST));
assertFalse(map.containsKey(Direction.NORTH));
//删除
map.remove(Direction.EAST);
assertFalse(map.containsKey(Direction.EAST));
assertFalse(map.remove(Direction.WEST, "北"));
assertTrue(map.remove(Direction.WEST, "西"));
//清空
map.clear();
assertEquals(0, map.size());
}
enumMap注意事项
enumMap删除时,需传入key和value两个参数
如:
map.remove(Direction.WEST, "西")当键值对匹配时
则可以删除成功
map.remove(Direction.WEST, "北")匹配失败
则不会删除
EnumMap有序性
EnumMap返回的视图是有序的 这个顺序不是插入的顺序,而是枚举定义的顺序例:EnumMap视图有序性示例
EnumMap<Direction, String> map = Maps.newEnumMap(Direction.class);
map.put(Direction.EAST, "东");
map.put(Direction.SOUTH, "南");
map.put(Direction.WEST, "西");
map.put(Direction.NORTH, "北");
//返回所有Value
Collection<String> values = map.values();
values.forEach(System.out::println);
//返回所有Key
Set<Direction> keySet = map.keySet();
keySet.forEach(System.out::println);
//返回所有<Key,Value>
Set<Map.Entry<Direction, String>> entrySet = map.entrySet();
entrySet.forEach(entry -> {
System.out.println(entry.getKey() + ":" + entry.getValue());
});
-----运行以上代码,将输出以下信息------
北
南
东
西
NORTH
SOUTH
EAST
WEST
NORTH:北
SOUTH:南
EAST:东
WEST:西
EnumMap性能说明
1.由于enumMap元素固定,其大小固定,所以其性能比较优秀 2.EnumMap顺序固定 3.EnumMap底层采用两个数组对元素进行存储,所以其性能比较优秀
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


