【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一下我们的代码,有很多代码编写过 ...
随机推荐
- Android双击退出
重写返回键 private long tempTime = 0; /** * 双击退出 */ @Override public void onBackPressed() { long firstCli ...
- 仿爱奇艺视频,腾讯视频,搜狐视频首页推荐位轮播图(二)之SuperIndicator源码分析
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52510431 背景:仿爱奇艺视频,腾讯视频 ...
- 通过JNDI从服务器容器中获取资源_Spring JNDI+Mysql+Tomcat
通过JNDI从服务器容器中获取DataSource资源 (由容器管理,不要关闭它,容器自己会处理)上一篇我们使用的是dbcp,这里使用JNDI: 使用JNDI连接数据: 在Spring可以注释 < ...
- 在Android中使用AlarmManager
AlarmManager是Android中的一种系统级别的提醒服务,它会为我们在特定的时刻广播一个指定的Intent.而使用Intent的时候,我们还需要它执行一个动作,如startActivity, ...
- SSH深度历险(七) 剖析SSH核心原理(一)
接触SSH有一段时间了,但是对于其原理,之前说不出来莫模模糊糊(不能使用自己的语言描述出来的就是没有掌握),在视频和GXPT学习,主要是实现了代码,一些原理性的内容还是欠缺的,这几天我自己也一直在反问 ...
- 动手实现linux中的cp命令(可自行拓展)
我们在学习系统编程的时候,一定会有这样的经历,让你动手实现一个简单的cp命令,也就是拷贝相应的文件到对应的目录,或者说是复制吧,当然,实现非常的简单,我们来看看源码吧: #include <st ...
- Hessian探究(一)Hessian入门示例
一.hessian的maven信息: [html] view plain copy print? <dependency> <groupId>com.caucho</gr ...
- Nginx+PHP-FPM的域Socket配置方法
1什么是域Socket "Unix domain socket 或者 IPCsocket 是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信.与管道相比,Unix domain ...
- java设计模式---状态模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为 ...
- CSS House
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...