实现功能
从一个大List中随机取出N个值,并且同一值(指同一个下标)只会取一次。
JAVA代码
import java.util.*;
/**
* 获取随机子列表
* @Author: leven
*/
public class RandomLists {
private static Random r;
/**
* 获取随机子列表
* @param source 原列表
* @param limit 子列表长度
* @param <T> 列表原类型
* @return 子列表
*/
public static <T> List<T> newRandomList(List<T> source, int limit) {
if(source == null || source.size() == 0 || source.size() <= limit){
return source;
}
Set<Integer> set = createRandomSet(source.size(), limit);
Integer[] array = set.toArray(new Integer[0]);
return new RandomList<>(source, array);
}
/**
* 创建一个随机的有序下标Set
* @param listSize 原列表长度
* @param limit 子列表长度
* @return 随机的下标Set
*/
private static Set<Integer> createRandomSet(int listSize, int limit) {
Random rnd = r;
if (rnd == null)
r = rnd = new Random();
Set<Integer> set = new HashSet<>(limit);
for (int i = 0; i < limit; i++) {
int value = rnd.nextInt(listSize);
if (!add(set, value, listSize)) {
return set;