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

问题描述 投票:24回答:2

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

java enums
2个回答
26
投票

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

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


7
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.