如何创建具有唯一整数作为元素的数组

时间:2018-01-17 00:14:12

标签: java arrays random elements

我想创建一个包含10000个唯一随机元素的数组。直到现在我只弄清楚如何创建随机整数并填充数组并找到双打并删除它们。但这减少了我不想要它的阵列的大小。 所以问题是如何在不减小数组大小的情况下将具有唯一整数的数组填充为元素。

4 个答案:

答案 0 :(得分:2)

您可以使用此代码。使用Set将消除重复项,并且您将获取随机数,直到获得10000个不同的随机整数。

Set<Integer> numbers = new HashSet<>();
Random r = new Random();
while (numbers.size() < 10000) {
    numbers.add(r.nextInt(100000));
}
Integer[] a = new Integer[numbers.size()];
a = numbers.toArray(a);

答案 1 :(得分:0)

尝试这个逻辑:

完全使用阵列列表,然后在整个操作结束时转换为阵列。

宣布一个arraylist

对于生成的每个随机数,检查arraylist中是否已存在该数字(使用.contains()方法)。如果是,请重复此过程,否则,请转到下一个号码。

代码示例:

    Arraylist<Integer> arr = new Arraylist<>();

    arr.add(generate());  //I included this line so that the arraylist won't be empty

    //Note that the method *generate()* generates a new random number

    for(int i = 0; i < 9999; i++){

        int next = generate();  //the method that generates your number

        if(arr.contains(next)){
            i--;   //The entire operation will be repeated for this index.
        }
        else{
            arr.add(next);   //Add the number to the arraylist
        }
    }

    int[] finalArray = arr.toArray();    //Your final resultant array!

我希望这有帮助..快乐编码!

答案 2 :(得分:0)

我找到了这个很棒的解决方案:

此解决方案不需要任何Collection类

public static int[] createRandomNumbers(int howMany) {
    int n = howMany + 1;

    int a[] = new int[n];

    for (int i = 0; i < n; i++) {
        a[i] = i;
    }

    int [] result = new int[n];

    int  x = n;
    SecureRandom rd = new SecureRandom();

    for (int i = 0; i < n; i++) {
        int k = rd.nextInt(x);

        result[i] = a[k];

        a[k] = a[x-1];

        x--;
    }

    return result;
}

System.out.println(Arrays.toString(createRandomNumbers(10000)));

参考: Best way to create a list of unique random numbers in Java

希望有所帮助

答案 3 :(得分:0)

您可以使用Set。此Collection不包含重复元素。

文档https://docs.oracle.com/javase/7/docs/api/java/util/Set.html

Set<Integer> numbers = new HashSet();

do {
    numbers.add(ThreadLocalRandom.current().nextInt());
} while(numbers.size() < 10000);