2025-02-17

  為瞭更好的支持枚舉類型,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”

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *