gpt4 book ai didi

java - 为什么 EnumSet 对不同的大小使用 RegularEnumSet 和 JumboEnumSet。它如何影响性能?

转载 作者:行者123 更新时间:2023-11-29 04:56:48 25 4
gpt4 key购买 nike

在探索 Java EnumSet 时,我遇到了两个package-private类,

  1. 正则枚举集
  2. 巨型枚举集

来自 EnumSet 来源:

if (universe.length <= 64)
return new RegularEnumSet<>(elementType, universe);
else
return new JumboEnumSet<>(elementType, universe);

还有 RegularEnumSet 构造函数看起来像:

RegularEnumSet(Class<E>elementType, Enum[] universe) {
super(elementType, universe);
}

而在 JumboEnumSet 构造函数的情况下是:

JumboEnumSet(Class<E>elementType, Enum[] universe) {
super(elementType, universe);
elements = new long[(universe.length + 63) >>> 6];
}

所以我的疑问是:

  • 为什么它根据大小使用不同的 EnumSet。它如何影响性能?

  • JumboEnumSet 使用元素数组的逻辑是什么?

最佳答案

  • RegularEnumSet使用单个 long作为它的位数组,所以它只包含 64 位,所以它只能跟踪最多 64 个枚举值的存在或不存在。
  • JumboEnumSet使用 long[] ,因此它可以容纳任意多位,因此它可以跟踪任意多枚举值的存在与否。

RegularEnumSet性能稍微好一点,因为它的间接性少一点(它将所有数据存储在对象中,而不是必须去检索一个单独的数组来查找它的数据),位操作少一点(它不必查找数组索引)等(我不知道这些东西在实践中有多重要,但我敢肯定,如果不合理的话,他们不会实现这种方法。)

关于java - 为什么 EnumSet 对不同的大小使用 RegularEnumSet 和 JumboEnumSet。它如何影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33493579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com