生成唯一的随机数会增加复杂性,并可能导致性能开销



>Implementation

private static List<Integer> getRandomDistribution(List<String> unsortedList, int max) {
    Random random = new Random();
    List<Integer> indexContainer = new ArrayList<>();
    for (int i = 0; i < max; i++) {
        int index = random.nextInt(max);
        // Below is what I don't like, 
        if (indexContainer.contains(index)) {
            i--;
        } else {
            indexContainer.add(index);
        }
    }
    return indexContainer;
}

所以基本上是这么说的,直到我找不到所需的唯一随机数。我将继续循环,可能发生的情况是它可能会持续循环很长时间,从而增加开销。

问题

  • int index = random.next(max) 应该决定随机性,我还必须保持排序。这就是为什么我使用列表
  • 其次,i-是我卡住的地方,因为坦率地说,我不喜欢这种实现。

注意:我还必须维护索引容器中的顺序。

由于您正在生成从 0 到 max-1 的所有数字的排列,因此用 0 到 max-1 的所有数字填充列表然后调用 Collections.shuffle(list) 会更有意义。

Random random = new Random();
List<Integer> indexContainer = new ArrayList<>();
for (int i = 0; i < max; i++) {
    indexContainer.add(i);
}
Collections.shuffle(indexContainer, random);

最新更新