You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Java Enum各常量的Byte集合生成Map<Byte, MyEnum>

实现方案

核心思路:利用枚举类的静态初始化机制,在类加载阶段一次性构建映射表,后续查询时间复杂度为O(1),完全规避运行时遍历枚举的性能开销。

完整实现代码

public enum MyEnum {
    VALUE_1(1, (byte)0),
    VALUE_2(2, (byte)16),
    VALUE_3(3, (byte)17),
    VALUE_4(4, (byte)1),
    VALUE_5(5, (byte)116),
    VALUE_6(6, (byte)-59),
    VALUE_7(7, (byte)29),
    //... 其余40个枚举值

    private final int faceIndex;
    private final byte byteIndex;
    private final Set<Byte> byteIndexPowerSet;

    // 静态只读映射表
    private static final Map<Byte, MyEnum> BYTE_TO_ENUM_MAP;

    static {
        // 可根据所有枚举的powerSet总大小设置初始容量,避免扩容开销
        BYTE_TO_ENUM_MAP = new HashMap<>();
        for (MyEnum enumVal : MyEnum.values()) {
            for (Byte b : enumVal.byteIndexPowerSet) {
                // 可选冲突检测:避免不同枚举的powerSet出现重复byte导致逻辑错误,不需要可删除
                if (BYTE_TO_ENUM_MAP.containsKey(b)) {
                    throw new IllegalStateException(String.format(
                        "Byte值[%d]重复出现在枚举[%s]和[%s]的powerSet中",
                        b, BYTE_TO_ENUM_MAP.get(b), enumVal
                    ));
                }
                BYTE_TO_ENUM_MAP.put(b, enumVal);
            }
        }
    }

    MyEnum(int faceIndex, byte byteIndex) {
        this.faceIndex = faceIndex;
        this.byteIndex = byteIndex;
        // 替换为你自己的幂集生成逻辑
        this.byteIndexPowerSet = generatePowerSet(byteIndex);
    }

    // 对外暴露的高性能查询方法
    public static MyEnum getByByte(Byte b) {
        return BYTE_TO_ENUM_MAP.get(b);
    }

    // 示例幂集生成方法,替换为你的实际实现
    private static Set<Byte> generatePowerSet(byte byteIndex) {
        // 自定义逻辑
        return Set.of(byteIndex);
    }

    // 原有getter方法按需保留
    public int getFaceIndex() { return faceIndex; }
    public byte getByteIndex() { return byteIndex; }
    public Set<Byte> getByteIndexPowerSet() { return byteIndexPowerSet; }
}

注意事项

  • 原始伪代码中构造器第二个参数传入的是int类型,需要强转为byte否则会触发编译错误,上述代码已经做了修正
  • 如果业务允许不同枚举的powerSet存在重复byte,可删除冲突检测逻辑,后加载的枚举值会覆盖之前的映射
  • 映射构建操作仅在类第一次加载时执行一次,运行时查询无额外开销,完全适配高频率调用场景

内容的提问来源于stack exchange,提问作者azagwen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:39:03