最近有一個需求,比較簡單,就是如標題所說的,從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; }