java从数组a[]={1,2,3,4,5,6,7,8,9,10}中随机抽取5个数且不重复

java从数组a[]={1,2,3,4,5,6,7,8,9,10}中随机抽取5个数且不重复

问题描述:

java从数组a[]={1,2,3,4,5,6,7,8,9,10}中随机抽取5个数且不重复

这里只有十个元素,用 Random 的 nextInt() 对 10 求余,产生 10 以内的元素作为访问角标。
同时需要维护一个 Set 判断是否重复,demo:

public static void main(String[] args) {
        int a[]={1,2,3,4,5,6,7,8,9,10};
        Random r = new Random();
        int count = 10;
        while(count-->0){
            Set<Integer> result = new HashSet<Integer>(5);
            while(result.size()<5){
                int index = r.nextInt(10)%10;//范围为 10
                int currentData = a[index];
                if(result.contains(currentData)){
                    continue;
                }

                System.out.print("随机加入:"+ currentData);
                result.add(currentData);
            }
            System.out.println("第"+count+"次,last随机数:"+result);
        }


    }

random 的随机性还是可以的,基本上很少重复的。

如果数组的元素本身都是不重复的,那就取出一个删除一个OK了

取0-9之间的不重复的5个随机数当作下标 i1,i2,i3,i4,i5 ,直接取a[i1],a[i2],a[i3],a[i4],a[i5]不就好了。

public static void main(String[] args) {
        Integer[] nums=new Integer[] {1,2,3,4,5,6,7,8,9,10};

        Set<Integer>  numSet=new HashSet<>();
        while (numSet.size()<5) {
            int index = (int) (Math.floor(Math.random() * nums.length));
            if(!numSet.contains(nums[index])) {
                numSet.add(nums[index]);
            }
        }

        System.out.println(numSet.toString());
    }

import java.util.Random;

int a[]={1,2,3,4,5,6,7,8,9,0};
Random r = new Random();

int[] get5Random1(int list[]){
    for(int i = 0; i < 100; i++){
        int index = r.nextInt();
        int temp = a[index];
        a[index] = a[0];
        a[0] = temp;
    }
    return a;
}