为什么EnumSet是作为抽象类实现的,而EnumMap是作为具体类实现的?

时间:2011-03-03 14:47:36

标签: java enums

我很想知道,为什么EnumSet被实现为抽象类并且EnumMap被实现为具体类?

2 个答案:

答案 0 :(得分:26)

EnumSet实际上有两个实现 - 一个用于具有64个或更少元素的枚举(指示集合中存在值的标志存储为long),另一个用于其他枚举(标志存储为long[])。 EnumSet的工厂方法根据传入的枚举类返回其中一个。

这样的优化对EnumMap没有意义(因为无论如何都需要存储值的数组),因此EnumMap是一个具体的类。

答案 1 :(得分:7)

EnumSet使用两个实现,RegularEnumSetJumboEnumSet,具体取决于枚举的大小(64个元素是阈值)。工厂方法委托给适当的实现。

另一方面,

EnumMap对所有枚举类型都是一样的(它保存了所有枚举项的数组和一个大小相等的值),因此不需要抽象类。