背景
我们经常会遇到这样子的逻辑,从一批数中随机抽取一部分数据来。比如有1000个单词,每次随机生产50个单词给用户,怎么做呢?
解决办法
这里基于的是Java语言来解决,假设有个单词列表List
随机产生size个不大于all且不重复的下标
/**
* 从all里面随机产生size个不重复的下标
* @param size 需要产生的下标数
* @param all 范围
* @return
*/
public static int[] getRandomNums(int size,int all) {
if(size>all) {
System.err.println("size大于all"+size+">"+all);
return null;
}
SecureRandom random = new SecureRandom();
//把all当成一个list
List<Integer> list = new ArrayList<Integer>();
for(int i=0;i<all;i++) {
list.add(i);
}
int[] result = new int[size];
for(int j=0;j<size;j++) {
//随机生成一个下标
int index = random.nextInt(list.size());
//根据下标去取list中的值
result[j]=list.get(index);
//从list移除该值
list.remove(index);
}
return result;
}