前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础之集合框架--EnumMap(枚举映射类)

Java基础之集合框架--EnumMap(枚举映射类)

作者头像
用户7886150
修改2021-04-22 14:33:04
6810
修改2021-04-22 14:33:04
举报
文章被收录于专栏:bit哲学院

参考链接: Java EnumMap

程序内部能够区分没有映射和映射为null的情况,但是两者最终的返回结果都是一样的,都是null 

package newFeatures8;

import java.util.EnumMap;

import java.util.Map;

public class MapDemo {

    public static void main(String[] args) {

        EnumMapTest.main(args);

    }

}

/*

 * jdk1.5才有EnumMap

与枚举类型键一起使用的专用 Map 实现。枚举映射中所有键都必须来自单个枚举类型,该枚举类型在创建映射时显式或隐式地指定。枚举映射在内部表示为数组。此表示形式非常紧凑且高效。 

枚举映射根据其键的自然顺序 来维护(该顺序是声明枚举常量的顺序)。在 collection 视图(keySet()、entrySet() 和 values())所返回的迭代器中反映了这一点。 

由 collection 视图返回的迭代器是弱一致 的:它们不会抛出 ConcurrentModificationException,也不一定显示在迭代进行时发生的任何映射修改的效果。 

不允许使用 null 键。试图插入 null 键将抛出 NullPointerException。但是,试图测试是否出现 null 键或移除 null 键将不会抛出异常。允许使用 null 值。 

像大多数 collection 一样,EnumMap 是不同步的。如果多个线程同时访问一个枚举映射,并且至少有一个线程修改该映射,则此枚举映射在外部应该是同步的。

这一般通过对自然封装该枚举映射的某个对象进行同步来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap(java.util.Map) 

方法来“包装”该枚举。最好在创建时完成这一操作,以防止意外的非同步访问: 

 Map<EnumKey, V> m = Collections.synchronizedMap(new EnumMap<EnumKey, V>(...));

 实现注意事项:所有基本操作都在固定时间内执行。虽然并不保证,但它们很可能比其 HashMap 副本更快。 

*/

class EnumMapTest {

    public enum Color{//默认继承  extends Enum类,所以枚举也是个类,既然是类就有构造函数,变量,方法等

        RED, BLUE, BLACK, YELLOW, GREEN;//下标为0,1,2,3,4

        @Override

        public String toString() {

            return super.toString()+"..."+super.ordinal();//ordinal()方法获取下标

        }

    }

    public static void main(String[] args) {

        EnumMap<Color, String> map = new EnumMap<>(Color.class);

         //System.out.println(Color.GREEN);

        map.put(Color.YELLOW, "黄色");

        map.put(Color.BLUE, null);

        // map.put(null, "无"); //会报NullPonitException的错误

        map.put(Color.RED, "红色");

        map.put(Color.GREEN, "绿色");

        map.get(Color.BLACK);

        for (Map.Entry<Color, String> entry : map.entrySet()) {

            System.out.println(entry.getKey() + ":" + entry.getValue());

        }

        System.out.println(map);

    }

}

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档