gpt4 book ai didi

java - 通过其内部字段获取枚举

转载 作者:IT老高 更新时间:2023-10-28 20:59:51 28 4
gpt4 key购买 nike

有内部字段的枚举,一种 map 。

现在我需要通过其内部字段获取枚举。

这样写的:

package test;

/**
* Test enum to test enum =)
*/
public enum TestEnum {
ONE(1), TWO(2), THREE(3);

private int number;

TestEnum(int number) {
this.number = number;
}

public TestEnum findByKey(int i) {
TestEnum[] testEnums = TestEnum.values();
for (TestEnum testEnum : testEnums) {
if (testEnum.number == i) {
return testEnum;
}
}
return null;
}
}

但是每次我需要找到合适的实例时,查找所有枚举并不是很有效。

有没有其他方法可以做到这一点?

最佳答案

您可以使用 static Map<Integer,TestEnum>staticTestEnum 填充它的初始化程序由其number 键入的值字段。

请注意 findByKey已制作 static , 和 number也做了final .

import java.util.*;

public enum TestEnum {
ONE(1), TWO(2), SIXTY_NINE(69);

private final int number;
TestEnum(int number) {
this.number = number;
}

private static final Map<Integer,TestEnum> map;
static {
map = new HashMap<Integer,TestEnum>();
for (TestEnum v : TestEnum.values()) {
map.put(v.number, v);
}
}
public static TestEnum findByKey(int i) {
return map.get(i);
}

public static void main(String[] args) {
System.out.println(TestEnum.findByKey(69)); // prints "SIXTY_NINE"

System.out.println(
TestEnum.values() == TestEnum.values()
); // prints "false"
}
}

您现在可以期待 findByKey成为 O(1)操作。

引用文献

相关问题


关于 values() 的注释

第二个println main 中的声明方法揭示:values()每次调用都返回一个新分配的数组!原文O(N)解决方案可以通过调用 values() 做得更好一些一次并缓存数组,但该解决方案仍将是 O(N)平均。

关于java - 通过其内部字段获取枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2780129/

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