为什么EnumSet是作为抽象类实现的,而EnumMap是作为具体类实现的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么EnumSet是作为抽象类实现的,而EnumMap是作为具体类实现的?相关的知识,希望对你有一定的参考价值。
答案
EnumSet
实际上有两个实现 - 一个用于具有64个或更少元素的枚举(表示集合中存在值的标志存储为long
),另一个用于其他枚举(标志存储为long[]
)。 EnumSet
的工厂方法根据传入的枚举类返回其中一个。
这样的优化对于EnumMap
没有意义(因为无论如何都需要存储值的数组),因此EnumMap
是一个具体的类。
另一答案
EnumSet
使用两个实现,RegularEnumSet
和JumboEnumSet
,具体取决于枚举的大小(64个元素是阈值)。工厂方法委托给适当的实现。
另一方面,EnumMap
对所有枚举类型都是一样的(它保存了所有枚举项的数组和一个大小相等的值),因此不需要抽象类。
以上是关于为什么EnumSet是作为抽象类实现的,而EnumMap是作为具体类实现的?的主要内容,如果未能解决你的问题,请参考以下文章