從N個元素的集合中隨機取m個元素的算法實現

  最近有一個需求,比較簡單,就是如標題所說的,從N個元素中隨機取m個元素,固然這m個元素是不能存在重複的。本覺得這麼簡單的需求,應該有現成的工具類來實現,可是幾回查找竟然沒找到(有知道的能夠推薦下哈^_^)。只好本身實現了下。java

  本身的實現思路也不知道是否是有問題,或者還有沒有更好的思路來實現,因此在這裏貼出來,供有興趣的猿友提提建議、找找問題,或者找到更好的實現思路。dom

  廢話很少說,直接上代碼(java實現)工具

/**
     * 隨機取num個從0到maxVal的整數。包括零,不包括maxValue
     * @param num
     * @param maxValue
     * @return
     */
    public static List<Integer> random(int num,int maxValue){
        if(num>maxValue ){
           num=maxValue;
        }
        if(num<0 || maxValue<0){
            throw new RuntimeException("num or maxValue must be greater than zero");
        }
        List<Integer> result = new ArrayList<Integer>(num);

        int[] tmpArray = new int[maxValue];
        for(int i=0;i<maxValue;i++){
            tmpArray[i]=i;
        }

        Random random = new Random();
        for(int i=0;i<num;i++){
            int index =  random.nextInt(maxValue-i);
            int tmpValue = tmpArray[index];
            result.add(tmpValue);
            int lastIndex = maxValue-i-1;
            if(index==lastIndex){
                continue;
            }else{
                tmpArray[index]=tmpArray[lastIndex];
            }

        }


        return result;
    }
相關文章
相關標籤/搜索