java - 从枚举中选择一个随机值?

标签 java random enums

如果我有这样的枚举:

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/

相关文章:

java - 在 Java ArrayList 中查找最大元素

c - 尝试生成每个唯一数字为9的数字

typescript - TypeScript 中的类型化枚举实例

java ? : operator in vb. 网络

java - 新 TLAB 中的分配与 TLAB 之外的分配

java - 为什么这个 if 语句不能正确运行

具有枚举值的 C# Propertygrid 组合框(Win Forms)

c# - 没有具有键 'IEnumerable<SelectListItem>' 的 'PestType' 类型的 ViewData 项

java - 如何避免实习对象的缓慢等于?

java - javax.crypto.KeyGenerator使用/random或/urandom生成 key 吗?