如果我有这样的枚举:
public enum Letter { A, B, C, //... }
随机挑选一个的最佳方法是什么?它不需要是生产质量的防弹产品,但是相当均匀的分配将是不错的选择。
我可以做这样的事情
private Letter randomLetter() { int pick = new Random().nextInt(Letter.values().length); return Letter.values()[pick]; }
但是有更好的方法吗?我觉得这是之前已解决的问题。
我唯一建议的是缓存结果,values()因为每个调用都会复制一个数组。另外,不要Random每次都创建一个。保持一个。除此之外,您在做什么都很好。所以:
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)); } }