Java:一次从数组中选择几个不同的随机数

SPG*_*SPG 10 java arrays

有人能告诉我如何一次从阵列中选择几个不同的随机数?例如,有一个long int数组.我想从中挑选7个数字.所有数字必须不相同,并按增加顺序对它们进行排序.

Random random = new Random();
int a = mixColor[random.nextInt(mixColor.length)];
int b = mixCoor[random.nextInt(mixCoor.length)];
int c = mixCoor[random.nextInt(mixCoor.length)];
int d = mixCoor[random.nextInt(mixCoor.length)];
int e = mixCoor[random.nextInt(mixCoor.length)];
while(b!=c && c!=d && b!=d) {
   b = mixCoor[random.nextInt(mixCoor.length)];
   c = mixCoor[random.nextInt(mixCoor.length)];
   d = mixCoor[random.nextInt(mixCoor.length)];
}
Run Code Online (Sandbox Code Playgroud)

mixColor[]并且mixCoor[]是长int数组.我可以用这种方式做,但如果我想选更多数字,这将非常复杂.我也需要对它们进行排序.有人得到好主意吗?

Ósc*_*pez 10

尝试使用此方法:

public static int[] pickNRandom(int[] array, int n) {

    List<Integer> list = new ArrayList<Integer>(array.length);
    for (int i : array)
        list.add(i);
    Collections.shuffle(list);

    int[] answer = new int[n];
    for (int i = 0; i < n; i++)
        answer[i] = list.get(i);
    Arrays.sort(answer);

    return answer;

}
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

int[] mixColor = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int[] randomPicks = pickNRandom(mixColor, 5);
Run Code Online (Sandbox Code Playgroud)

该方法保证n随机拾取精确的元素,并将它们返回排序.它还保证不会多次拾取任何元素,并且只要输入数组没有重复,结果数组就不会有重复.

上面的代码工作正常,但是在int和之间来回切换很麻烦,Integer如果输入数组很大(比如> 100.000个元素),它可能会很慢.先测试一下,看看它是否符合您的需求.