一、从数组中随机抽取若干不重复元素

/**
* @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;
}

从数组和List中随机抽取若干不重复的元素的更多相关文章

  1. PHP中如何在数组中随机抽取n个数据的值 - array_rand()?

    PHP中如何在数组中随机抽取n个数据的值? 最佳答案 array_rand() 在你想从数组中取出一个或多个随机的单元时相当有用.它接受 input 作为输入数组和一个可选的参数 num_req,指明 ...

  2. TODO:从数据库中随机抽取一条记录

    TODO:从数据库中随机抽取一条记录 1.最直接,最粗暴的方法先计算记录的总数,然后选择一个从0到记录总数之间的随机数n,利用skip跳过n条记录,这是效率低下的的方法,首先的记录总数,在用skip会 ...

  3. 随手小代码——Python 从集合中随机抽取元素

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  4. php array_rand()函数从数组中随机选择一个或多个元素

    php使用array_rand()函数从数组中随机选择一个或多个元素的方法. 使用array_rand() 函数从数组中随机选出一个或多个元素,并返回.  array_rand(array,numbe ...

  5. 从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)

    从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接) 一.总结 一句话总结:最好的是这个:"SELECT * FROM table WHERE id >= (( ...

  6. laravel如何从mysql数据库中随机抽取n条数据

    laravel如何从mysql数据库中随机抽取n条数据 一.总结 一句话总结: inRandomOrder():$userQuestions=UserQuestion::where($map)-> ...

  7. 【转】从一副扑克牌中随机抽取N张

    该问题为产生不重复的随机数序列,形象点就是一副扑克牌中随机抽取N张. 摘自:不重复随机数列生成算法 改了一部分 /** * 从0-max随机选N个数出来 * **/ public static int ...

  8. 原!!mysql,几十万条数据中随机抽取1万以内的数据

    想了几种方法: 1.将所有符合条件的对象集合都查出来,在代码里做随机. 2.先查出所有符合条件的id,再代码随机需要抽查数量的id,再 到数据库 中 in. 3.利用order by rand() l ...

  9. 排列组合(包括n中随机抽取m个)

    有些情况我们需要获取一个数组中的所有排列组合情况,或者获取一部分数据进行随机组合,这个在python中有一个模块可以实现.具体情况如下 :::::::::::::::::::::::::::::::: ...

  10. python 列表中随机抽取多个数

    方法一:[random.randint(0,100) for _ in range(2)]输出: [34, 44]方法二:list中随机去取K个数list=[1,2.3,......] random. ...

随机推荐

  1. 探秘Transformer系列之(15)--- 采样和输出

    探秘Transformer系列之(15)--- 采样和输出 目录 探秘Transformer系列之(15)--- 采样和输出 0x00 概述 0x01 Generator 1.1 Linear 1.2 ...

  2. [源码系列:手写spring] AOP第一节:切点表达式

    在本专栏之前的文章中已经带大家熟悉了Spirng中核心概念IOC的原理以及手写了核心代码,接下来将继续介绍Spring中另一核心概念AOP.         AOP即切面编程是Spring框架中的一个 ...

  3. exGCD 2025/1/10

    前言: 全文均为蒟蒻作者手搓 虽也参考了许多 [luogu 题解/某SDN/cnblogs.com] 但很多地方均为作者瞎编 如有错误务必救救孩子 File int GCD(int a,int b){ ...

  4. 【虚拟机】VirualBox安装macOS系统

    [虚拟机]VirualBox安装macOS系统 零.创建虚拟机 类型选择 Mac OS X 版本选择 macOS 10.13 High Sierra (64-bit) 注意:这边我设置的名称为 Mac ...

  5. ASP.NET Core 静态资源的打包与压缩

    以 Visual Studio Community 2017 15.5.1 为例 配置文件 bundleconfig.json 新建一个AspNetCore MVC项目,项目中会有一个bundleco ...

  6. REST API从木愣到够呆

    目前准备写一个API服务,遵循REST规范,因为自己也是第一次接触这玩意,所以就以自我的认知和理解过程来记录,留爪. ##在REST里什么叫资源? 拿数据表为例: 现在有三张表:(此表非彼婊) sch ...

  7. Crealens.ai 免费体验GPT-4o 生图+吉卜力风格化

    自己的一张日常照片,能在几秒内变身为一幅充满童话感的吉卜力风插画?90%的人不知道,如今只需一句话,就能在 ChatGPT 里实现"AI 生图"--这就是 GPT-4o 生图功能的 ...

  8. Nginx+Windows搭建域名访问环境, 由nginx --> 网关 ---> 服务

    1).修改windows hosts文件改变本地域名映射,将gulimall.com映射到虚拟机ip 2).修改nginx的根配置文件nginx.conf,将upstream映射到我们的网关服务 up ...

  9. 探秘Transformer系列之(28)--- DeepSeek MLA

    探秘Transformer系列之(28)--- DeepSeek MLA 目录 探秘Transformer系列之(28)--- DeepSeek MLA 0x00 概述 0x01 原理 1.1 问题 ...

  10. JS 对象(Object)和字符串(String)互转方法、JS遍历对象

    原文:https://www.cnblogs.com/fps2tao/p/8723164.html 1.对象(Object)和字符串(String)互转 利用原生JSON对象,将对象转为字符串 var ...