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底层采用两个数组对元素进行存储,所以其性能比较优秀
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。