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

2022-09-01 20:51:24

我想知道,有什么理由将EnumSet实现为抽象类,而EnumMap作为具体类实现?


答案 1

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

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


答案 2

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

EnumMap另一方面,对于所有枚举类型的工作方式相同(它保留所有枚举项的数组和大小相等的值数组),因此不需要抽象类。