【Java编程】随机数的不重复选择
随机数的不重复选择就是从n个数中随机选取m(m<n)个数。在本文中,我们用Java来实现。因此我们先介绍Java的相关知识。
在Java中,Java.util.Set接口和Java.util.List接口一样,都是继承自Java.util.Collection接口。但是两者有不同的特点:
package tengwei.com;
import java.util.*;
public class UseVector {
public static void main(String[] args) {
// TODO Auto-generated method stub
Vector<Integer> vec=selectSeven();//调用函数
Enumeration<Integer> enu=vec.elements();//得到向量中所有元素的枚举
while(enu.hasMoreElements())//遍历向量中的所有元素
System.out.println(enu.nextElement()+"\t");
Object obj[]=vec.toArray();//把向量vec转化为Oject数组
Arrays.sort(obj);//升序排序
System.out.println("升序排列后:");
for(int i=0;i<obj.length;i++)
System.out.println(obj[i]+"\t");
}
/**从1-36中随机选择7个不重复的数 */
public static Vector<Integer> selectSeven()
{
Random rd= new Random();//创建随机数对象
Vector<Integer> allNum = new Vector<Integer>();//存放1-36
Vector<Integer> sevenNum = new Vector<Integer>();//存放选择的7个数
for(int i=0;i<36;i++)
allNum.add(new Integer(i+1));//向向量allNum中添加36个数
int x;
for(int i=0;i<7;i++)
{
x=rd.nextInt(36-i);//得到0-(36-i)中随机数,不包含36-i
sevenNum.add(allNum.get(x));
allNum.remove(x);
}
return sevenNum;
}
}
本算法的基本思想就是先用Vector保存你的样本空间(36个数),然后产生一个随机数,以随机数为下标来取出样本空间的数,并且将该数从样本空间删除。该算法的缺点是原始样本空间不能有重复的数,当样本空间很大的时候,会占用很多内存空间。当然还有几种算法也可以选择,具体请查看下一篇文章。
package tengwei.com;
import java.util.*;
public class UseHashSetTreeSet {
public static void main(String[] args) {
// TODO Auto-generated method stub
Set<Integer> hashset = hashSelect(7);//调用函数,返回哈希集
System.out.println("HashSet中所有元素(未排列)");
System.out.println("\t"+hashset);
SortedSet<Integer> treeset = treeSelect(7);//调用函数,返回数集
System.out.println("TreeSet中所有元素(升序)");
System.out.println("\t"+treeset);
}
public static Set<Integer> hashSelect(int k)
{
Random rd = new Random();
Set<Integer> hs= new HashSet<Integer>();
while(hs.size()<k)
{
int x=1+rd.nextInt(36);//随机1-36之间的数,包括两边
hs.add(new Integer(x));
}
return hs;
}
public static SortedSet<Integer> treeSelect(int k)
{
Random rd = new Random();
SortedSet<Integer> ts= new TreeSet<Integer>();
while(ts.size()<k)
{
int x=1+rd.nextInt(36);
ts.add(new Integer(x));//当重复时不会添加
}
return ts;
}
}
上面的算法比较简单,比较巧妙的用到了Set接口的特性。
原文:http://blog.csdn.net/tengweitw/article/details/24395949
作者:nineheadedbird
【Java编程】随机数的不重复选择的更多相关文章
- java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串
java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 package com.zdz.test; im ...
- Java编程基础-选择和循环语句
一.选择结构语句 选择结构:也被称为分支结构.选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码. Java语言提供了两种选择 ...
- java 获取随机数的三种方法
方法1(数据类型)(最小值+Math.random()*(最大值-最小值+1))例:(int)(1+Math.random()*(10-1+1))从1到10的int型随数 方法2获得随机数for (i ...
- Java获取随机数的几种方法
Java获取随机数的几种方法 .使用org.apache.commons.lang.RandomStringUtils.randomAlphanumeric()取数字字母随机10位; //取得一个3位 ...
- Java编程的逻辑 (34) - 随机
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- Java编程的逻辑 (40) - 剖析HashMap
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- JAVA编程思想——分析阅读
需要源码.JDK1.6 .编码风格参考阿里java规约 7/12开始 有点意识到自己喜欢理论大而泛的模糊知识的学习,而不喜欢实践和细节的打磨,是因为粗心浮躁导致的么? cron表达式使用 设计能力.领 ...
- Java编程中“为了性能”尽量要做到的一些地方
最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Ja ...
- JAVA编程“性能说”(java编程需要做的26件事)
转载于 http://www.csdn.net/article/2012-06-01/2806249 最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过 ...
随机推荐
- 高端技巧:如何使用#define定义变量
Introduction 想在源文件中定义一个跟行号有关的变量,每次都手动输入实在是太慢了,本文介绍如何使用宏定义来定义与行号有关的变量. 例如:我们想在源代码的第10行定义A_10这样的一个整形变量 ...
- 快速了解 Robot Operating System(ROS) 机器人操作系统
http://www.ros.org/ 关于ROS About ROS http://www.ros.org/about-ros/ 机器人操作系统(ROS)是用于编写机器人软件的灵活框架.目的在简化 ...
- Android简易实战教程--第二十一话《内容观察者监听数据库变化》
当数据库的数据发生改变,我们又想知道具体改变的情况时,就需要对数据库的变化情况做一个监控.这个任务,就由内容观察者来完成.下面这个案例,为短信数据库注册内容观察者,来监控短信的变化情况,当短信数据库发 ...
- How to Find the Self Service Related File Location and Versions
How to Find the Self Service Related File Location and Versions (文档 ID 781385.1) In this Document ...
- 如何解决RK3168或者RK系列MASKROM的问题
不知道使用RK芯片的小伙伴有没有遇到我这样的问题,在用Android-Tool下载相应 IMG的时候,正常情况下,按电源键和音量+键应该出现loader下载模式,但是却出现MASKROM的字样,以前不 ...
- DAA和CMAC
数据认证算法(DAA) Data Authentication Algorithm DAA建立在DES之上,该算法比较陈旧,人们已经发现了这个算法的安全弱点,目前已经被废止. DAA采用DES运算的 ...
- Android性能优化之被忽视的优化点
对于性能优化这个知识点来说,实在是太广了,博主本人也一直非常关注这方面的学习,而对于性能优化来说它包括了非常非常非常多方面,比如:I/O的优化.网络操作的优化.内存的优化.数据结构的优化.代码层次的优 ...
- (国内)完美下载Android源码Ubuntu版
今天写的文章莫名奇妙的没了,所以再重新写一篇. 首先,为了方便起见,我已经将系统更换成里Ubuntu,因为官方推荐使用这个Linux发行版.先来一张系统的截图: Ubuntu的版本是16.04(推荐用 ...
- 15-5-23 下午02时22分58秒 CST> <Info> <Management> <BEA-141281> <unable to get file lock, will retry ...>
A-141281> <unable to get file lock, will retry ...> http://gdutlzh.blog.163.com/blog/s ...
- Spring注入
Spring注入 Spring注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为. 常用的两种注入方式: setter注入 构造注入 <?xml version=&quo ...