EnumMap详解

乔欣 Java经验 发布时间:2023-03-10 22:18:21 阅读数:610 1
下文笔者讲述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底层采用两个数组对元素进行存储,所以其性能比较优秀
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202303/16784587695999.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者