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

/**
* @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. .NET 10 Preview 2 增强了 Blazor 和.NET MAUI

    .NET 团队 3.18 发布了.NET 10 Preview 2(https://devblogs.microsoft.com/dotnet/dotnet-10-preview-2/)..NET 1 ...

  2. 面试题-Spring和Springboot框架

    前言 spring框架部分的题目,是我根据Java Guide的面试突击版本V3.0再整理出来的,其中,我选择了一些比较重要的问题,并重新做出相应回答,并添加了一些比较重要的问题,希望对大家起到一定的 ...

  3. CSS那些事读书笔记-1

    背景 作为一个后端开发,曾经尝试过学习前端,但是总觉不得要领,照猫画虎,而公司里又有专业的前端开发,工作中几乎接触不到实际的前端任务,所以前端的技能田野一直是一片荒芜.但是笔者深知前端的技能对找工作和 ...

  4. MySQL 事务隔离级别:社交恐惧症的四个阶段

    MySQL 事务隔离级别:社交恐惧症的四个阶段 在数据库的世界里,数据们也有社交问题!事务隔离级别就是控制它们互相看到对方的程度... 什么是事务隔离? 想象一下,数据库是一个繁忙的餐厅,每个事务都是 ...

  5. 【JDBC第1章】JDBC概述

    第1章:JDBC概述 1.1 数据的持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以 ...

  6. Windows体验-注册表

    打开方式中关闭在应用商店查找关联应用 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer NoUseStoreOpenWit ...

  7. ZKmall模版商城前后端分离秒级响应架构深度解析

    在当今的电商领域,用户体验和响应速度已成为决定平台竞争力的关键因素.ZKmall模版商城,作为一款高性能的电商平台解决方案,通过采用前后端分离架构,实现了秒级响应,为用户带来了极致的购物体验.本文将深 ...

  8. SSL测试证书

    1. tomcat 1.1 生成 keytool -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore -validity 365 过 ...

  9. STM32 DMA中的DMA_BufferSize和DMA_MemoryDataSize   

    示例代码1 采集2通道ADC数据 查看代码 extern uint16_t ADC3ConvertedValue[2]; /* DMA2 Stream0 channel2 配置 *********** ...

  10. Spring 如何解决循环依赖?

    Spring通过三级缓存机制来解决单例Bean的Setter或字段注入类型的循环依赖问题.以下是Spring解决循环依赖的核心流程: 1. 三级缓存介绍 Spring容器为了解决循环依赖,维护了以下三 ...