我有更多的枚举值,我想问你缓存枚举值的方法是什么:
例如:
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方法。