首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Enum值()方法效率

Enum值()方法效率
EN

Stack Overflow用户
提问于 2013-10-10 18:32:19
回答 2查看 2.3K关注 0票数 2

在多次调用特定枚举类的value()函数时是否存在效率低下的问题?

我已经看到了现有代码的实例,在这些实例中,值()的结果被缓存以便重用。这个有用吗?

代码语言:javascript
复制
public enum Blah {

    private static final Blah [] _myValues = values()

    ...

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

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-10 18:33:40

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

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

票数 6
EN

Stack Overflow用户

发布于 2013-10-10 19:09:26

是的,这是低效的,但还有另一种方法,它几乎没有那么昂贵:

代码语言:javascript
复制
EnumSet.allOf(MyEnum.class);

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19303511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档