如何解决缓存枚举值
我有更多带有一些值的枚举,我想问你有什么方法可以缓存枚举值:
例如:
public enum Animal {
Dog,Cat,Cow;
static Animal[] values;
static EnumSet<Animal> cachedAnimalsEnumSet;
static List<Animal> cachedAnimalsList;
static {
values = values();
cachedAnimalsEnumSet = EnumSet.allOf(Animal.class);
cachedAnimalsList = Arrays.asList(Animal.values());
}
}
哪种方式最好: 值,cachedAnimalsEnumSet 还是 cachedAnimalsList ?
解决方法
假设您缓存的目的是避免每次有人调用 Animal.values() 时都创建新数组,而是只使用缓存的值。出于以下原因,我建议使用 EnumSet:
- 所有基本操作都是恒定时间。
- 缓存重复的枚举值没有意义,Set 实现会为您处理。
然而,需要考虑的几件事是 EnumSet 中不允许空值(非常怀疑您是否想要缓存空值)。第二个要注意的是 EnumSet 是不同步的。因此,如果您要让多个线程访问并修改此缓存,则必须使用 Collections.synchronizedSet 方法对其进行包装。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。