Java:Map(三)——EnumMap:Key是枚舉類型


HashMap通過計算KeyhashCode(),直接定位到Value在內部數組的索引,所以效率很高。

Key是枚舉類型的Map:EnumMap

如果Keyenum類型,那么就可以使用Java集合庫提供的一種EnumMap,它在內部以一種緊湊的數組存儲Value,並且根據enum類型的Key直接定位到內部數組索引,且不需要計算hashCode(),效率高且沒有空間浪費。

例子

假設有一個枚舉類DayOfWeek

enum DayOfWeek {
    SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;
}

利用這個枚舉類實現一個EnumMap:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Map <DayOfWeek,String> map = new EnumMap<> (DayOfWeek.class);
        map.put(DayOfWeek.MONDAY, "星期一");
        map.put(DayOfWeek.TUESDAY, "星期二");
        map.put(DayOfWeek.WEDNESDAY, "星期三");
        map.put(DayOfWeek.THURSDAY, "星期四");
        map.put(DayOfWeek.FRIDAY, "星期五");
        map.put(DayOfWeek.SATURDAY, "星期六");
        map.put(DayOfWeek.SUNDAY, "星期日");
        System.out.println(map);
        System.out.println(map.get(DayOfWeek.MONDAY));
    }
}

{SUNDAY=星期日, MONDAY=星期一, TUESDAY=星期二, WEDNESDAY=星期三, THURSDAY=星期四, FRIDAY=星期五, SATURDAY=星期六}
星期一

使用EnumMap時,我們總是用Map接口來引用它(正如上文代碼中標紅的部分)。因此,實際上可以把HashMapEnumMap互換(指的是對EnumMap調用HashMap的方法),在客戶端看來沒有任何區別。

小結

如果MapKeyenum類型,推薦使用EnumMap,既保證速度又不浪費控件。

使用EnumMap時,根據面向抽象編程原則,應使用Map接口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM