【问题标题】:Why EnumSet is implemented as abstract class and EnumMap is implemented as concrete class?为什么 EnumSet 实现为抽象类而 EnumMap 实现为具体类?
【发布时间】:2011-03-03 14:47:35
【问题描述】:

我想知道,EnumSet 实现为抽象类而EnumMap 实现为具体类有什么原因吗?

【问题讨论】:

    标签: java enums


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-09
        • 2018-07-19
        • 1970-01-01
        • 1970-01-01
        • 2018-10-05
        • 2013-09-30
        • 1970-01-01
        • 2013-02-15
        相关资源
        最近更新 更多