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

时间:2016-07-11 12:19:13

标签: java algorithm performance sorting

实施

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 - 是我被困的地方,因为坦率地说,我不喜欢这个实施。

注意: 我还必须在 indexContainer 中维护订单。

1 个答案:

答案 0 :(得分:4)

由于您正在生成从0到max-1的所有数字的排列,因此使用从0到max-1的所有数字填充List会更有意义,然后调用{{1} }。

Collections.shuffle(list)