如果我有这样的枚举:
public enum Letter {
A,
B,
C,
//...
}
随机选择一个的最佳方法是什么?它不需要是生产质量的防弹,但相当均匀的分布会很好。
我可以做这样的事情
private Letter randomLetter() {
int pick = new Random().nextInt(Letter.values().length);
return Letter.values()[pick];
}
但是有更好的方法吗?我觉得这是以前解决的问题。
最佳答案
我唯一建议的是缓存 values()
的结果,因为每次调用都会复制一个数组。另外,不要每次都创建 Random
。留一个。除此之外,你正在做的很好。所以:
public enum Letter {
A,
B,
C,
//...
private static final List<Letter> VALUES =
Collections.unmodifiableList(Arrays.asList(values()));
private static final int SIZE = VALUES.size();
private static final Random RANDOM = new Random();
public static Letter randomLetter() {
return VALUES.get(RANDOM.nextInt(SIZE));
}
}
关于java - 从枚举中选择一个随机值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1972392/