轉載請注明源出處:http://www.cnblogs.com/lighten/p/7371744.html
1.前言
本章介紹Map體系中的EnumMap,該類是專門針對枚舉類設計的一個集合類。集合中的所有鍵必須是同一個枚舉類的實例。當EnumMap創建后,會表現成一個數組array,這種表現方式是緊湊高效的。EnumMap的順序,由枚舉類實例的定義順序決定。集合視圖的迭代器是弱一致(weakly consistent)的,不會拋出並發異常ConcurrentModificationException。當迭代器運行時不會展示另一個線程對map的修改。空的鍵是不被允許的。線程不安全,最好在創建的時候調用Collections#synchronizedMap方法來進行同步。注意,所有基礎操作都是常量級時間。
2.EnumMap
上面就是EnumMap的一個基本結果了。keyType是枚舉類的Class對象,keyUniverse是枚舉類按順序下來的實例對象,存放在數組中。vals就是對應鍵的值,下標相同就是一對。size就是大小了,NULL是沒有查詢到鍵時的結果。從這個結構可以看出,EnumMap的操作應該是很快的,都是數組。
put方法就簡單了,檢查其類型,再獲取類中的順序號,直接對應相應的key值就可以了。remove方法類似。
由於上面的原因,必須和類完全匹配才行,所以通過集合來構造的時候,實際上只是取了第一個元素的類型,然后才遍歷放入對應的位置。
其它的也沒有什么可說的,最后注意一下EnumMap由於其實現的特性,所以移除的時候鍵也不會移除。