[Java]不重复随机数生成简易算法
2016-03-17 11:14
621 查看
方法一
通过单个数组简易实现不重复随机数生成,先上源码。/** * 获取随机数组 * @param 源数组 * @param size 目标数组大小 * @return 随机数组 */ public static int[] getRandomRes(int[] source,int size){ if (source == null && size > source.length) { return; } int[] result = new int[size]; Random random = new Random(); for (int i = 0; i < size; i++) { int randomIndex = random.nextInt(source.length - 1 - i); int randomRes = source[randomIndex]; result[i] = randomRes; int temp = source[randomIndex]; source[randomIndex] = source[source.length - 1 - i]; source[source.length - 1 - i] = temp; } return result; }
下面看图解,数字为数组的index。
黑色数字表示能随机到的数,红色代表不能随机到数。
因此只能随机到index:0~4的数,假设是2,然后将2与index5互换位置。
此时结果result[] = {2}
继续循环
从前index:0~3中循环,假设取出index0,与index4互换
此时结果为result = {2,0}
依次类推。
优点:简单快捷
缺点:每次无法取到最后一个数。
方法二
不断随机,使用Set去重
/** *生成随机数组 *@param size 目标数组大小 *@param max 目标数最大值 */ public Set<Integer> getRandomSet(int size,int max){ Random random= new Random(); Set<Integer> result= new LinkedHashSet<Integer>(); while (generated.size() < size) { Integer next = rng.nextInt(max) + 1; generated.add(next); } }
此处使用
LinkedHashSet保证插入顺序与结果相同。
相关文章推荐
- Eclipse与MyEclipse的选择问题
- spring jms + activemq + maven搭建
- eclipse 新建 Dynamic Web Project时jsp文件404错误的解决办法
- Java中使用正则表达式
- Spring3.x JSR-303
- spring3
- Java day05 final 关键字
- spring3定时器简单配置
- Java day04 生成工具类文档
- java下的printf(jdk1.5+)
- Java day04 静态static,静态代码块
- java线程sleep()和wait()的区别
- springmvc配置一:ajax请求防止返回中文乱码配置说明
- Android Studio导入Eclipse的library工程
- java运算符优先级
- ubuntu安装jdk
- java同步代码块和同步方法的区别
- Ubuntu+Eclipse+ADT+Genymotion+VirtualBox开发环境搭建
- Java8中的简易并发
- JAVA_WEB学习经验总结