说说Java中的枚举——EnumMap与EnumSet

 为了更好的支持枚举类型,java.util中添加了两个新类:EnumMap和EnumSet。使用它们可以更高效的操作枚举类型。下面我一一介绍给你:

    EnumMap是专门为枚举类型量身定做的Map实现。虽然使用其它的Map实现(如HashMap)也能完成枚举类型实例到值得映射,但是使用EnumMap会更加高效:它只能接收同一枚举类型的实例作为键值,并且由于枚举类型实例的数量相对固定并且有限,所以EnumMap使用数组来存放与枚举类型对应的值。这使得EnumMap的效率非常高。

    提示:EnumMap在内部使用枚举类型的ordinal()得到当前实例的声明次序,并使用这个次序维护枚举类型实例对应值在数组的位置。

    下面是使用EnumMap的一个代码示例。枚举类型DataBaseType里存放了现在支持的所有数据库类型。针对不同的数据库,一些数据库相关的方法需要返回不一样的值,示例中getURL就是一个。

Java代码

//现支持的数据库类型枚举类型定义

public enum DataBaseType{

                   MYSQL,ORACLE,DB2,SQLSERVER

}

//某类中定义的获取数据库URL的方法以及EnumMap的声明。

……

private EnumMap<DataBaseType ,String> urls =

new EnumMap<DataBaseType ,String>(DataBaseType.class);

                  

public DataBaseInfo(){

         urls.put(DataBaseType.DB2,"jdbc:db2://localhost:5000/sample");

         urls.put(DataBaseType.MYSQL,"jdbc:mysql://localhost/mydb");

         urls.put(DataBaseType.ORACLE,"jdbc:oracle:thin:@localhost:1521:sample");

         urls.put(DataBaseType.SQLSERVER,"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb");

}

/**

* 根据不同的数据库类型,返回对应的URL

* @param type     DataBaseType枚举类新实例

* @return

*/

public String getURL(DataBaseType type){

         return this.urls.get(type);

}

    在实际使用中,EnumMap对象urls往往是由外部负责整个应用初始化的代码来填充的。这里为了演示方便,类自己做了内容填充。

    像例子中那样,使用EnumMap可以很方便的为枚举类型在不同的环境中绑定到不同的值上。如:例子中getURL绑定到URL上,在其它的代码中可能又被绑定到数据库驱动上去。

    EnumSet是枚举类型的高性能Set实现。它要求放入它的枚举常量必须属于同一枚举类型。EnumSet提供了许多工厂方法以便于初始化,见下表:

    EnumSet作为Set接口实现,它支持对包含的枚举常量的遍历:

Java代码

for(Operation op : EnumSet.range(Operation.PLUS , Operation.MULTIPLY)) {

                   doSomeThing(op);

}

 

---------------------------------------------------------------------------------------------------    

     系列文章:
     说说Java中的枚举——JDK1.4之前
     说说Java中的枚举——定义枚举
     说说Java中的枚举——简单使用
     说说Java中的枚举——EnumMap与EnumSet
     说说Java中的枚举——就是一个类
     说说Java中的枚举——模板方法
     说说Java中的枚举——反向查找、总结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值