Java案例实现不重复的随机数

需求:获得十个1-20的随机数,要求随机数不能重复,存储到集合中并遍历

分析:

  • 1.创建Set集合对象,可以使用HashSet也可以使用TreeSet,区别在于TreeSet是排序后的
  • 2.创建随机数对象,获取一个随机数
  • 3.判断集合长度是否大于10,是停止生成、存储并遍历
  • 否:继续生成直到长度大于10停止生成、存储并遍历
  • 4.输出

代码:

public class SetDemo {
    public static void main(String[] args) {
        //创建Set集合对像
        Set<Integer> s=new TreeSet<Integer>();
        //创建随机数对象
        Random r=new Random();
        while(s.size()<10){
            int num= r.nextInt(20)+1;
            s.add(num);
        }
        for (Integer i:s){
            System.out.println(i);
        }
    }
}
​

补充:

通过单个数组简易实现不重复随机数生成,先上源码。

/**
* 获取随机数组
* @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保证插入顺序与结果相同。

到此这篇关于Java案例实现不重复的随机数的文章就介绍到这了,更多相关Java不重复随机数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java ArrayList如何实现生成不重复随机数

    在此之前我使用Java的数组实现了产生N-M之间的不重复的随机数,下面是使用数列ArrayList实现同样的功能,代码如下: /** * 随机生成 N--M,N个不重复随机数 使用ArrayList * * @param startRange 起始数字 * @param endRange 终止数字 * @param count 个数 */ public static ArrayList<Integer> getRandom(int startRange, int endRange, int c

  • Java实现生成n个不重复的随机数

    本文实例为大家分享了Java实现生成n个不重复的随机数的具体代码,供大家参考,具体内容如下 需求: 根据min和max,生成n个不重复的随机数.(注:范围[min,max],n <= (max - min +1)) 思路: 0).把从min到max的可能出现的数字全部放进一个候选List: 1).随机生成索引index(0 <= index <= (list.size()-1)): 2).根据index从List中取出一个数,list.get(index),并移除这个元素: 代码如下:

  • Java编程实现生成给定范围内不重复随机数的方法小结

    本文实例总结了Java编程实现生成给定范围内不重复随机数的方法.分享给大家供大家参考,具体如下: 在Java中的Math类中存在一个random()方法,该方法默认生成0.0到1.0之间的double型随机数:经过稍微处理,就可以产生我们需要的随机数以及随机字符. 除了Math类中的random()方法之外,java.util.Random类也可以用来生成随机数:下面分别举例(用不同的方法生成双色球号码)说明: 1. Math.random()方法 生成随机数: package test; im

  • JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写

    本文介绍了Java随机数,分享给大家,也顺便做个笔记 package com.fty.util; import java.security.SecureRandom; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; public class UtilId { /** * 生成16位不重复的随机数,含数字+大小写 * @return */ public static String getGUID() {

  • Java编程实现从给定范围内随机N个不重复数生成随机数的方法小结

    本文实例讲述了Java编程实现从给定范围内随机N个不重复数生成随机数的方法.分享给大家供大家参考,具体如下: 一.JAVA中生成随机数的方式 1.在j2se中使用Math.random()令系统随机选取一个0~1之间的double类型小数,将其乘以一个数,比如25,就能得到一个0~25范围内的随机数,这个在j2me中没有: int randomNumber = (int) Math.round(Math.random()*(max-min)+min); 2.在System类中有一个current

  • Java案例实现不重复的随机数

    需求:获得十个1-20的随机数,要求随机数不能重复,存储到集合中并遍历 分析: 1.创建Set集合对象,可以使用HashSet也可以使用TreeSet,区别在于TreeSet是排序后的 2.创建随机数对象,获取一个随机数 3.判断集合长度是否大于10,是停止生成.存储并遍历 否:继续生成直到长度大于10停止生成.存储并遍历 4.输出 代码: public class SetDemo {   public static void main(String[] args) {       //创建Se

  • Java实现数组去除重复数据的方法详解

    本文实例讲述了Java实现数组去除重复数据的方法.分享给大家供大家参考,具体如下: 前一段时间被面试问到:如果一个数组中有重复元素,用什么方法可以去重?一时间会想到用一种方法,但是后来查阅资料后发现,有好多方法可以实现,现在就总结一下,比较简单的几种. 一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer>(); for (int i=0; i<s

  • javascript获取不重复的随机数的方法比较

    不重复的随机数方案1:1531 毫秒 一般的思路是先创建一个1-3000的数组,每一次取出一个,然后让这个数组减少一个, 取一个,减少一个,这样就可以做到永不重复了. 随机不重复_www.jb51.net var count=3000; var original=new Array;//原始数组 //给原始数组original赋值 for (var i=0;i 我们 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 不重复的随机数方案2:297毫秒 但是方案1采用了slice方法,此方

  • php生成N个不重复的随机数实例

    有25幅作品拿去投票,一次投票需要选16幅,单个作品一次投票只能选择一次.前面有个程序员捅了漏子,忘了把投票入库,有200个用户产生的投票序列为空.那么你会如何填补这个漏子?当然向上级反映情况.但是我们这里讨论的是技术,就是需要生成1-25之间的16个不重复的随机数,去填补.具体怎么设计函数呢?将随机数存入数组,再在数组中去除重复的值,即可生成一定数量的不重复随机数.程序如下: 复制代码 代码如下: <?php/** array unique_rand( int $min, int $max,

  • PHP基于自增数据如何生成不重复的随机数示例

    本文主要介绍了PHP基于自增数据生成不重复的随机数的相关内容,分享出来供大家参考学习,下面多说无益 直接上代码: 关键点在于生成的自增数据位数控制 位数控制在于两个地方 1. $base 基数组 如果是8位这个数组必须是8位 2. $i 自增数,自增数不能超过8位数 当前简单分析的结果就是以上.大家如果是全局不重复,还是建议使用uuid之类的比较合适. 示例代码: function swap($n,$base) { $mask = 19; //1 + 2 + 16 $n = intval($n,

  • php获取一定范围内取N个不重复的随机数

    本文实例讲述了php获取一定范围内取N个不重复的随机数的方法.分享给大家供大家参考,具体如下: //range 是将1000到9999 列成一个数组 $numbers = range (1000,9999); //shuffle 将数组顺序随即打乱 shuffle ($numbers); //array_slice 取该数组中的某一段 $result = array_slice($numbers,0,3); print_r($result); 运行结果为: Array ( [0] => 9767

  • PHP 生成N个不重复的随机数

    起因: 有25幅作品拿去投票,一次投票需要选16幅,单个作品一次投票只能选择一次.前面有个程序员捅了漏子,忘了把投票入库,有200个用户产生的投票序列为空.那么你会如何填补这个漏子? 当然向上级反映情况.但是我们这里讨论的是技术,就是需要生成1-25之间的16个不重复的随机数,去填补.具体怎么设计函数呢?将随机数存入数组,再在数组中去除重复的值,即可生成一定数量的不重复随机数. 程序如下: 复制代码 代码如下: <?php /* * array unique_rand( int $min, in

  • Java使用正则表达式截取重复出现的XML字符串功能示例

    本文实例讲述了Java使用正则表达式截取重复出现的XML字符串功能.分享给大家供大家参考,具体如下: public static void main(String[] args) throws DocumentException { String s = "<MTCCommand Time=\"2014-03-22\"><Login UserId=\"admin\" UserPasswd=\"123\" />&l

随机推荐