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

Che*_*eng 24 java enums

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

axt*_*avt 26

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

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


Sea*_*oyd 7

EnumSet使用两个实现,RegularEnumSet并且JumboEnumSet,取决于枚举的大小(64个元素是阈值).工厂方法委托给适当的实现.

EnumMap 另一方面,对于所有枚举类型(它保留所有枚举项的数组和大小相等的值),所以不需要抽象类.