枚举值()方法效率

时间:2013-10-10 18:32:20

标签: java enums

多次调用特定枚举类的values()函数是否效率低下?

我见过现有代码的实例,其中value()的结果被缓存以供重用。这有用吗?

public enum Blah {

    private static final Blah [] _myValues = values()

    ...

    public static Blah findBlahFromName(String name) {
        for (Blah blah : _myValues) {
            ...
        }
    }

}

2 个答案:

答案 0 :(得分:5)

如果您多次使用它,最好将values()的结果缓存在枚举中。那是因为,每次调用values()方法时,它都会创建一个新数组。所以,这确实不是必需的,因为你总是会得到相同的数组元素。

如注释中所述,共享一个缓存的数组将不是线程安全的,因为其他线程可以修改数组中的索引,因为它是可变的。一个选项是将元素包装在List<YourEnum>中,并使用Collections.unmodifiableList()共享列表。

答案 1 :(得分:4)

是的,它效率低下,但还有另一种方法可以做到这一点并不是那么贵:

EnumSet.allOf(MyEnum.class);

EnumSet与JDK有特殊的连接,允许它重用底层数组。