【发布时间】:2011-03-03 14:47:35
【问题描述】:
【问题讨论】:
【问题讨论】:
EnumSet 实际上有两种实现——一种用于具有 64 个或更少元素的枚举(表示集合中存在值的标志存储为long),另一种用于其他枚举(标志存储为long[]) . EnumSet 的工厂方法根据传入的枚举类返回其中之一。
这样的优化对EnumMap 没有意义(因为无论如何都需要数组来存储值),因此EnumMap 是一个具体的类。
【讨论】:
EnumSet 使用两种实现方式,RegularEnumSet 和 JumboEnumSet,具体取决于枚举的大小(阈值为 64 个元素)。工厂方法委托给适当的实现。
另一方面,EnumMap 对所有枚举类型的工作方式相同(它保留所有枚举项的数组和大小相等的值数组),因此不需要抽象类。
【讨论】: