一尘不染

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

java

如果我有这样的枚举:

public enum Letter {
    A,
    B,
    C,
    //...
}

随机挑选一个的最佳方法是什么?它不需要是生产质量的防弹产品,但是相当均匀的分配将是不错的选择。

我可以做这样的事情

private Letter randomLetter() {
    int pick = new Random().nextInt(Letter.values().length);
    return Letter.values()[pick];
}

但是有更好的方法吗?我觉得这是之前已解决的问题。


阅读 445

收藏
2020-09-08

共1个答案

一尘不染

我唯一建议的是缓存结果,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));
  }
}
2020-09-08