一、從數組中隨機抽取若干不重復元素
/** * @function:從數組中隨機抽取若干不重復元素 * * @param paramArray:被抽取數組 * @param count:抽取元素的個數 * @return:由抽取元素組成的新數組 */ public static String[] getRandomArray(String[] paramArray,int count){ if(paramArray.length<count){ return paramArray; } String[] newArray=new String[count]; Random random= new Random(); int temp=0;//接收產生的隨機數 List<Integer> list=new ArrayList<Integer>(); for(int i=1;i<=count;i++){ temp=random.nextInt(paramArray.length);//將產生的隨機數作為被抽數組的索引 if(!(list.contains(temp))){ newArray[i-1]=paramArray[temp]; list.add(temp); } else{ i--; } } return newArray; }
二、從list中隨機抽取若干不重復元素
/** * @function:從list中隨機抽取若干不重復元素 * * @param paramList:被抽取list * @param count:抽取元素的個數 * @return:由抽取元素組成的新list */ public static List getRandomList(List paramList,int count){ if(paramList.size()<count){ return paramList; } Random random=new Random(); List<Integer> tempList=new ArrayList<Integer>(); List<Object> newList=new ArrayList<Object>(); int temp=0; for(int i=0;i<count;i++){ temp=random.nextInt(paramList.size());//將產生的隨機數作為被抽list的索引 if(!tempList.contains(temp)){ tempList.add(temp); newList.add(paramList.get(temp)); } else{ i--; } } return newList; }
或者如下方法:
思路1:利用List來把數組保存起來,在每取出一個元素后就刪除這個元素。
/** * 使用一個List來保存數組,每次隨機取出一個移除一個。 */ public String[] getRandomArray(int n, String[] strArray){ List<String> list = new ArrayList<String>(); for(int i=0; i<strArray.length; i++){ list.add(strArray[i]); } Random random = new Random(); // 當取出的元素個數大於數組的長度時,返回null if(n>list.size()){ return null; } String[] result = new String[n]; for(int i=0; i<n; i++){ // 去一個隨機數,隨機范圍是list的長度 int index = random.nextInt(list.size()); result[i] = list.get(index); list.remove(index); } return result; }
思路2:在使用一個boolean型數組保存對應數組中元素是否被取出的狀態。
/** * 使用一個兩個數組,一個來保存元素,一個用來保存對應元素是否被取走 */ public String[] getRandomArray(int n, String[] strArray){ // 當取出的元素個數大於數組的長度時,返回null if(n>strArray.length){ return null; } // 定義一個域strArray相同長度的數組,每個位置保存對應位置是否被取走 boolean[] bool = new boolean[strArray.length]; for(int i=0; i<strArray.length; i++){ bool[i] = false; } Random random = new Random(); String[] result = new String[n]; for(int i=0; i<n; i++){ int index; // 判斷隨機的位置是否被取走,取走則繼續循環 do{ index = random.nextInt(n); }while(bool[index]); // 取出元素,將其對應位置設置為true bool[index] = true; result[i] = strArray[index]; } return result; }