>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);