EnumMap】的更多相关文章

上节我们提到,如果需要一个Map的实现类,并且键的类型为枚举类型,可以使用HashMap,但应该使用一个专门的实现类EnumMap. 为什么要有一个专门的类呢?我们之前介绍过枚举的本质,主要是因为枚举类型有两个特征,一是它可能的值是有限的且预先定义的,二是枚举值都有一个顺序,这两个特征使得可以更为高效的实现Map接口. 我们先来看EnumMap的用法,然后看它到底是怎么实现的. 用法 举个简单的例子,比如,有一批关于衣服的记录,我们希望按尺寸统计衣服的数量. 定义一个简单的枚举类,Size,表示…
package cn.xf.cp.ch02.item33; import java.util.EnumMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.junit.Test; /** * *功能:序数索引 *时间:下午4:24:48 *文件:HerbOld.java *@author Administrator * */ public class HerbOld { publ…
一.概述 EnumMap是一类特殊的Map, 其特殊之处在于KEY需要是枚举类型,由于枚举类型的特点是值的个数是固定的,所以,对于EnumMap来说,其所能存储的个数也就是固定的了.这种类型的Map相对来说是比较简单的. 二.主要实现介绍 1. 初始化 由于EnumMap的enum特点,决定了其容器的容量是不变的,所以,在创建一个EnumMap的时候,我们就需要指定其大小,目前创建一个EnumMap主要有以下几种方式: public EnumMap(Class<K> keyType) : 根据…
以下内容基于jdk1.7.0_79源码: 什么是EnumMap Map接口的实现,其key-value映射中的key是Enum类型: 补充说明 其原理就是一个对象数组,数组的下标索引就是根据Map中的key直接获取,即枚举中的ordinal值: 效率比HashMap高,可以直接获取数组下标索引并访问到元素: 简单示例 比较简单,源代码就不一一添加注释了,简单地说,就是一个对象数组: 这里稍微了解一下怎么使用就好了,下面列出一些方法的调用示例: package com.pichen.collect…
Wrong practice: Putting sets into an array indexed by the type's ordinal /** * Added demo for the "Use EnumMap instead of ordinal indexing". */ package com.effectivejava.EnumAnnotations; /** * @author Kaibo * */ public class Herb { public enum T…
有时候,会见到利用ordinal方法来索引数组的代码.例如下面这个简化的类,表示一种烹饪用的香草: public class Herb { public enum Type { ANNUAL, PERENNIAL, BIENNIAL } private final String name; private final Type type; Herb(String name, Type type) { this.name = name; this.type = type; } @Override…
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.LinkedHashMap实现类 LinkedHashMap需要维护意识的插入顺序,因此性能略低于HashMap的性能:但因为它以 链表来维护内部顺序,所以在迭代访问Map里的全部元素时将有较好的性能.下面示范了 LinkedHashMap的功能. import java.util.LinkedHashMap; public class LinkedHashMapTest { public…
EnumMap是一个用于存放键值为enum类型的map.全部的键值必须来自一个单一的enum类型.EnumMap内部用数组表示效率更高. EnumMap维持键值的自然顺序(即枚举类型常量声明的顺序),能够通过keySet()和entrySet()方法的集合视图来体现其顺序. 集合视图返回的迭代器是弱一致的:遍历时候不会抛出ConcurrentModificationException.遍历过程中若对容器进行改动.改动产生的影响遍历过程可能可见也可能不可见. 不同意null键值插入,插入空值将会抛…
java 一个函数如何返回多个值   在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值的key是什么,只能通过doc或者通过源代码来查看. 2.传入一个引用进去,修改引用的属性值.问题:不实用. 3.通过泛型构造一个类似python的tuple类,或者构造一个JavaBean,其问题都是“一次性”,觉的不优雅. 个人解决方案: 使用EnumMap作为返回值类型,自己定义一个enum,…
优点:常量做为Key,在编译期就确定了.Enum做为key,在运行时也可以改变 package enumdemo; import java.util.EnumMap; import java.util.Map; import java.util.Set; public class EnumMaps { public static void main(String[] args) { EnumMap<AlarmPoints, Command> em = new EnumMap<AlarmP…