EnumMap
以下内容基于jdk1.7.0_79源码;
什么是EnumMap
Map接口的实现,其key-value映射中的key是Enum类型;
补充说明
其原理就是一个对象数组,数组的下标索引就是根据Map中的key直接获取,即枚举中的ordinal值;
效率比HashMap高,可以直接获取数组下标索引并访问到元素;
简单示例
比较简单,源代码就不一一添加注释了,简单地说,就是一个对象数组;
这里稍微了解一下怎么使用就好了,下面列出一些方法的调用示例:
package com.pichen.collection; import java.util.EnumMap;
import java.util.Map;
import java.util.Map.Entry; enum Operate{
ADD, UPDATE, DELETE;
} public class Main { public static void main(String[] args) {
Map<Operate, String> map = new EnumMap<Operate, String>(Operate.class); //put方法
map.put(Operate.ADD, "add operate");
map.put(Operate.UPDATE, "update operate");
map.put(Operate.DELETE, "delete operate"); //重写了toString方法
System.out.println(map); //size方法
System.out.println(map.size()); System.out.println(map.containsKey(Operate.UPDATE));
System.out.println(map.containsValue("update operate"));
System.out.println(map.get(Operate.DELETE)); //remove
map.remove(Operate.UPDATE);
System.out.println(map); //key集合
for(Operate operate:map.keySet()){
System.out.print(operate + " ");
} System.out.println();
//value集合
for(String obj:map.values()){
System.out.print(obj + ",");
} System.out.println();
//key-value集合
for(Entry<Operate, String> entry:map.entrySet()){
System.out.print(entry.getKey() + ": " + entry.getValue() + ", ");
} }
}
输出结果:
{ADD=add operate, UPDATE=update operate, DELETE=delete operate}
3
true
true
delete operate
{ADD=add operate, DELETE=delete operate}
ADD DELETE
add operate,delete operate,
ADD: add operate, DELETE: delete operate,
EnumMap的更多相关文章
- 计算机程序的思维逻辑 (50) - 剖析EnumMap
上节我们提到,如果需要一个Map的实现类,并且键的类型为枚举类型,可以使用HashMap,但应该使用一个专门的实现类EnumMap. 为什么要有一个专门的类呢?我们之前介绍过枚举的本质,主要是因为枚举 ...
- 【Effective Java】9、使用EnumMap代替序数索引
package cn.xf.cp.ch02.item33; import java.util.EnumMap; import java.util.HashSet; import java.util.M ...
- 容器--EnumMap
一.概述 EnumMap是一类特殊的Map, 其特殊之处在于KEY需要是枚举类型,由于枚举类型的特点是值的个数是固定的,所以,对于EnumMap来说,其所能存储的个数也就是固定的了.这种类型的Map相 ...
- Effective Java 33 Use EnumMap instead of ordinal indexing
Wrong practice: Putting sets into an array indexed by the type's ordinal /** * Added demo for the &q ...
- 第33条:用EnumMap代替序数索引
有时候,会见到利用ordinal方法来索引数组的代码.例如下面这个简化的类,表示一种烹饪用的香草: public class Herb { public enum Type { ANNUAL, PER ...
- Java——(八)Map之LinkedHashMap、TreeMap、EnumMap实现类
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.LinkedHashMap实现类 LinkedHashMap需要维护意识的插入顺序,因此性能 ...
- EnumMap源代码阅读器
EnumMap是一个用于存放键值为enum类型的map.全部的键值必须来自一个单一的enum类型.EnumMap内部用数组表示效率更高. EnumMap维持键值的自然顺序(即枚举类型常量声明的顺序), ...
- java 一个函数EnumMap返回多个值
java 一个函数如何返回多个值 在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值 ...
- EnumMap demo
优点:常量做为Key,在编译期就确定了.Enum做为key,在运行时也可以改变 package enumdemo; import java.util.EnumMap; import java.util ...
随机推荐
- 浅谈你感兴趣的 C# GC 机制底层
本文内容是学习CLR.via C#的21章后个人整理,有不足之处欢迎指导. 昨天是1024,coder的节日,我为自己coder之路定下一句准则--保持学习,保持自信,保持谦逊,保持分享,越走越远. ...
- Sqlserver2005日志文件太大,使其减小的方法
Sqlserver2005日志文件太大,使其减小的方法: 运行下面的三行 dbName为数据库名: backup log dbNamewith NO_LOG backup log dbNamewith ...
- ISP接口隔离原则
一.定义 不应该强迫客户程序依赖并未使用的方法 二.接口污染 接口污染,在C#.C++这样的静态类型语言中是很常见的.一个接口会被他不需要的方法污染.在接口中假如一个方法只是为了能给它的一个子类带来好 ...
- Firemonkey 载入 Style 皮肤 (*.fsf 二进制文件) 速度测试
说明:Firemonkey 可以换肤是一大亮点,但使用它必须要付出一点代价,就是需要一点载入的时间,下面以 *.fsf 二进制文件来做载入测试,有兴趣可以参考看看. 开发:XE8 for iOS 皮肤 ...
- RecyclerView和PullToRefreshListView的对比
项目中上拉刷新和下拉加载一直都是比较常见的:以前一般都是重写ListView或直接用PullToRefreshListView的框架:最近尝试用RecyclerView来实现下拉加载上拉刷新也是不错的 ...
- 最小生成二叉树-prim算法
1.prim算法:一种计算生成最小生成树的方法,它的每一步都会为一棵生长中的树添加一条边. 2.时间复杂度:
- form表单
<form> <input type="text" value="123"> 文本输入框,value值为显示在文本框中的默认值, ...
- No.010:Regular Expression Matching
问题: Implement regular expression matching with support for '.' and '*'.'.' Matches any single charac ...
- Java Collection或Map的同步
新集合也提供了能防止多个进程同时修改一个容器内容的机制.若在一个容器里反复,同时另一些进程介入,并在那个容器中插入.删除或修改一个对象,便会面临发生冲突的危险.我们可能已传递了那个对象,可能它位于我们 ...
- Java经典实例:按字符颠倒字符串
使用StringBuilder类的reverse()方法来实现. /** * Created by Frank */ public class StringRevChar { public stati ...