java 获取集合中随机个数不重复项,返回新集合或者项在原集合的下标数组

原创  郑建华   2021-09-28   69人阅读  1 条评论

1、获取集合中随机个数不重复的项,组成一个新的子集

/**
 * 获取集合中随机个数不重复的项,组合新的集合
 * @param list 数据列表
 * @param num 随机数量
 * @return 子集
 */
public static List getRandomListByNum(List list,int num){
    List sourceList = new ArrayList(list);
    List targetList = new ArrayList();
    if(num >= list.size()){
        return list;
    }
    // 创建随机数
    Random random = new Random();
    // 根据数量遍历
    for(int i=0; i<num; i++){
        // 获取源集合的长度的随机数
        Integer index = random.nextInt(sourceList.size());
        // 获取随机数下标对应的值
        targetList.add(sourceList.get(index));
        // 删除数据
        sourceList.remove(sourceList.get(index));
    }
    return targetList;
}


2、获取集合中随机个数不重复的项,获取这些项在原集合中的下标

/**
 * 获取集合中随机个数不重复的项,返回下标数组
 * @param list 数据列表
 * @param num 随机数量
 * @return 子集
 */
public static List<Integer> getRandomIndexListByNum(List list,int num){
    List targetList = new ArrayList();
    List<Integer> indexList = new ArrayList<Integer>();
    if(num >= list.size()){
        return list;
    }
    // 创建随机数
    Random random = new Random();
    // 当set长度不足 指定数量时
    while (targetList.size() < num) {
        // 获取源集合的长度的随机数
        Integer index = random.nextInt(list.size());
        // 获取随机数下标对应的元素
        Object obj = list.get(index);
        // 不包含该元素时
        if(!targetList.contains(obj)){
            // 添加到集合中
            targetList.add(obj);
            // 记录下标
            indexList.add(index);
        }
    }
    return indexList;
}


本文地址:https://www.zjh336.cn/?id=2062
版权声明:本文为原创文章,版权归 郑建华 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

 评论列表

  1. 抖音好物推荐
    抖音好物推荐 【实习生】  @回复

    强势哦,棒棒达