為瞭更好的支持枚舉類型,java.util中添加瞭兩個新類:EnumMap和EnumSet。使用它們可以更高效的操作枚舉類型。下面我一一介紹給你:
EnumMap是專門為枚舉類型量身定做的Map實現。雖然使用其它的Map實現(如HashMap)也能完成枚舉類型實例到值得映射,但是使用EnumMap會更加高效:它隻能接收同一枚舉類型的實例作為鍵值,並且由於枚舉類型實例的數量相對固定並且有限,所以EnumMap使用數組來存放與枚舉類型對應的值。這使得EnumMap的效率非常高。
提示:EnumMap在內部使用枚舉類型的ordinal()得到當前實例的聲明次序,並使用這個次序維護枚舉類型實例對應值在數組的位置。
下面是使用EnumMap的一個代碼示例。枚舉類型DataBaseType裡存放瞭現在支持的所有數據庫類型。針對不同的數據庫,一些數據庫相關的方法需要返回不一樣的值,示例中getURL就是一個。
//現支持的數據庫類型枚舉類型定義
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接口實現,它支持對包含的枚舉常量的遍歷:
for(Operation op : EnumSet.range(Operation.PLUS , Operation.MULTIPLY)) {
doSomeThing(op);
}
作者“左羅CTO”