EnumSet 和 EnumMap 简单理解
在阅读《Effective Java》时,看到了 EnumSet
,就去查了下。
EnumSet
首先看一下类图:
内部实现上,每个 EnumSet
内容都表示为位矢量(区别于 HashSet 底层使用 HashMap 实现),一般(低于 64 个元素)整个 EnumSet 就是用一个 long
的位运算来表示的。也就是说它替你使用位算法实现了这一切,避免你自己写位运算导致代码难读懂的情况(实际上位运算不是太难读懂)。
但是不建议使用,具体看 EnumSet 可能是 Java 中最无意义的类。
EnumMap
类图如下:
EnumMap
和 HashMap
区别:
EnumMap
主要用于对枚举值做统计,EnumMap
能实现的,HashMap
都能实现;EnumMap
的性能更好,这是因为EnumMap
的Enum
特性决定了不论是从设计上,实现上,存储上都决定了其有很好的性能;EnumMap
还有其特殊的一些特性,例如维持了自然顺序。
更多详细分析请看 Java数据类型系列之EnumMap