在多次调用特定枚举类的value()函数时是否存在效率低下的问题?
我已经看到了现有代码的实例,在这些实例中,值()的结果被缓存以便重用。这个有用吗?
public enum Blah {
private static final Blah [] _myValues = values()
...
public static Blah findBlahFromName(String name) {
for (Blah blah : _myValues) {
...
}
}
}发布于 2013-10-10 18:33:40
如果多次使用,最好将values()的结果缓存在枚举本身中。这是因为,每次调用values()方法时,它都会创建一个新的数组。所以,这并不是必需的,因为您总是会得到相同的数组元素。
正如注释中所指出的,共享缓存的数组并不是线程安全的,因为其他线程可以修改数组中的索引,因为它是可变的。一个选项是将元素包装在List<YourEnum>中,并使用Collections.unmodifiableList()共享列表。
发布于 2013-10-10 19:09:26
是的,这是低效的,但还有另一种方法,它几乎没有那么昂贵:
EnumSet.allOf(MyEnum.class);EnumSet有特殊的连接到JDK,以允许它重用底层数组。
https://stackoverflow.com/questions/19303511
复制相似问题