返回顶部
首页 > 资讯 > 后端开发 > JAVA >java生成不重复的随机数方法总结
  • 728
分享到

java生成不重复的随机数方法总结

java 2018-12-23 16:12:54 728人浏览 猪猪侠
摘要

本文给大家介绍如何在JAVA中实现随机无重复数字的功能。(相关视频课程推荐:java视频教程)为了更好地理解这个题意,我们先来看下具体内容:生成一个1-100的随机数组,但数组中的数字不能重复,即位置是随机的,但数组元素不能重复。在这里呢,

本文给大家介绍如何在JAVA中实现随机无重复数字的功能。(相关视频课程推荐:java视频教程

为了更好地理解这个题意,我们先来看下具体内容:生成一个1-100的随机数组,但数组中的数字不能重复,即位置是随机的,但数组元素不能重复。

在这里呢,没有给我们规定数组的长度,我们可以让它是1-100之间的任意长度。

接下来让我们看一下几种实现方法并对这几种方法作个对比。

通常我们会使用ArrayList或数组来实现,先来看下ArrayList实现过程,如下面代码所示:

import java.util.ArrayList;
import java.util.Random;


public class Demo {
    public static void main(String[] args) {
        Object[] values = new Object[20];
        Random random = new Random();
        ArrayList list = new ArrayList();

        for(int i = 0; i < values.length;i++){
            int number = random.nextInt(100) + 1;
            
            if(!list.contains(number)){
                list.add(number);
            }
        }
        
        values = list.toArray();
        
        // 遍历数组并打印数据
        for(int i = 0;i < values.length;i++){
            System.out.print(values[i] + "	");
            
            if(( i + 1 ) % 10 == 0){
                System.out.println("
");
            }
        }
    }
}

使用数组实现的过程如下所示代码:

import java.util.Random;


public class Demo4 {
    public static void main(String[] args) {
        int[] values = new int[20];
        Random random = new Random();
        
        for(int i = 0;i < values.length;i++){
            int number = random.nextInt(100) + 1;
            
            for(int j = 0;j <= i;j++){
                if(number != values[j]){
                    values[i]=number;
                }                              
            }
        }
        
        // 遍历数组并打印数据
        for(int i = 0;i < values.length;i++){
            System.out.print(values[i] + "	");
            
            if(( i + 1 ) % 10 == 0){
                System.out.println("
");
            }
        }
    }
}

上面这两个实现过程效率比较低的。因为在每次添加时都要去遍历一下当前列表中是否存在这个数字,时间复杂度是O(N^2)。我们可以这样思考一下:既然涉及到无重复,我们可以想一下HashSet和HashMap的功能。

HashSet实现Set接口,Set在数学上的定义就是无重复,无次序的集合。而HashMap实现Map,也是不允许重复的Key。这样我们可以使用HashMap或HashSet来实现。

在使用HashMap实现时,只需要将它的key转化成数组就Ok了,如下代码:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Random;
import java.util.Map.Entry;


public class Demo {
    public static void main(String[] args) {
        int n = 0;
        Object[] values = new Object[20];
        
        Random random = new Random();
        HashMap hashMap = new HashMap();
        
        // 生成随机数字并存入HashMap
        for(int i = 0;i < values.length;i++){
            int number = random.nextInt(100) + 1;
            hashMap.put(number, i);
        }
        
        // 从HashMap导入数组
        values = hashMap.keySet().toArray();
        
        // 遍历数组并打印数据
        for(int i = 0;i < values.length;i++){
            System.out.print(values[i] + "	");
            
            if(( i + 1 ) % 10 == 0){
                System.out.println("
");
            }
        }
        
//        Iterator iter = hashMap.entrySet().iterator();
//        // 遍历HashMap
//        while (iter.hasNext()) {
//            Entry entry = (Entry)iter.next();
//            int key = entry.geTKEy();
//            n++;
//            
//            System.out.print(key + "	");
//            
//            if(n % 10 == 0){
//                System.out.println("
");
//            }
//        }
    }
}

由于HashSet和HashMap的关系太近了,HashSet在底层就是用HashMap来实现的,只不过没有Value的集合,只有一个Key的集合,所以也可使用HashSet来实现,如下代码:

import java.util.HashSet;
import java.util.Random;


public class Test {
    public static void main(String[] args) {
        Random random = new Random();
        Object[] values = new Object[20];
        HashSet hashSet = new HashSet();
        
        // 生成随机数字并存入HashSet
        for(int i = 0;i < values.length;i++){
            int number = random.nextInt(100) + 1;
            hashSet.add(number);
        }
        
        values = hashSet.toArray();
        
        // 遍历数组并打印数据
        for(int i = 0;i < values.length;i++){
            System.out.print(values[i] + "	");
            
            if(( i + 1 ) % 10 == 0){
                System.out.println("
");
            }
        }
    }
}

这样实现效率稍微好些。如果给我们限定了数组的长度,只需要变换下for循环,设置成whlie循环就可以了。如下所示:

import java.util.HashSet;
import java.util.Random;


public class Test {
    public static void main(String[] args) {
        Random random = new Random();
        Object[] values = new Object[20];
        HashSet hashSet = new HashSet();
        
        // 生成随机数字并存入HashSet
        while(hashSet.size() < values.length){
            hashSet.add(random.nextInt(100) + 1);
        }
        
        values = hashSet.toArray();
        
        // 遍历数组并打印数据
        for(int i = 0;i < values.length;i++){
            System.out.print(values[i] + "	");
            
            if(( i + 1 ) % 10 == 0){
                System.out.println("
");
            }
        }
    }
}

以上几种相比较而言,使用HashMap的效率是比较高的,其实是HashSet,再次是数组,最后是ArrayList。如果我们生成10000个数据将会发现,使用HashMap花费时间是:0.05s,HashSet是0.07s,数组是:0.20s,而ArrayList是0.25s。有兴趣的可以设置下时间查看一下。

当然了,除了使用HashMap实现外,还有其它高效的方法。比如,我们可以把1-100这些数字存储在一个数组中,然后在for循环中随机产生两个下标,如果这两个下标不相等的话,可以交换数组中的元素,实现过程如下所示:

import java.util.Random;


public class Demo4 {
    public static void main(String[] args) {
        int values[] = new int[100];   
        int temp1,temp2,temp3;   
        Random r = new Random();   
        
        for(int i = 0;i < values.length;i++){
            values[i] = i + 1;
        }
        
        //随机交换values.length次   
        for(int i = 0;i < values.length;i++){   
            temp1 = Math.abs(r.nextInt()) % (values.length-1); //随机产生一个位置   
            temp2 = Math.abs(r.nextInt()) % (values.length-1); //随机产生另一个位置   
            
            if(temp1 != temp2){
                temp3 = values[temp1];   
                values[temp1] = values[temp2];   
                values[temp2] = temp3;
            } 
        }   
        
        // 遍历数组并打印数据
        for(int i = 0;i < 20;i++){
            System.out.print(values[i] + "	");
            
            if(( i + 1 ) % 10 == 0){
                System.out.println("
");
            }
        }
    }
}

更多java相关文章请关注Java基础教程。

--结束END--

本文标题: java生成不重复的随机数方法总结

本文链接: https://lsjlt.com/news/1707.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java生成不重复的随机数方法总结
    本文给大家介绍如何在JAVA中实现随机无重复数字的功能。(相关视频课程推荐:java视频教程)为了更好地理解这个题意,我们先来看下具体内容:生成一个1-100的随机数组,但数组中的数字不能重复,即位置是随机的,但数组元素不能重复。在这里呢,...
    99+
    2018-12-23
    java
  • java生成不重复随机数的方法
    Java中产生随机数调用java.lang下面Math类中的random()方法产生随机数新建一个文件后缀名为java的文件,文件名取为MyRandom,该类中编写如下的代码:public class MyRandom { public s...
    99+
    2016-11-18
    java基础 java
  • java生成不重复的随机数
    java中要使生成的随机数不重复可以将已经生成的随机数放入到数组中,每次生成随机数时与数组的内容比较是否相等,相等则重新生成,不相等则存入数组。示例代码如下(生成10之内的4个不相等的整数): (推荐学习:java课程)p...
    99+
    2017-09-04
    java入门 java
  • java怎么生成不重复随机数
    java中要使生成的随机数不重复可以将已经生成的随机数放入到数组中,每次生成随机数时与数组的内容比较是否相等,相等则重新生成,不相等则存入数组。 (推荐学习:java课程)示例代码如下(生成10之内的4个不相等的整数):pub...
    99+
    2022-04-18
    java入门 java
  • java中产生随机不重复数的方法
    java中产生随机不重复数的方法:根据min和max,生成n个不重复的随机数。(注:范围[min,max],n ...
    99+
    2021-01-15
    java
  • java中使用什么方法生成不重复随机数
    方法一:调用java.lang下面Math类中的random()方法产生随机数新建一个文件后缀名为java的文件,文件名取为MyRandom,该类中编写如下的代码:public class MyRandom { public sta...
    99+
    2016-03-21
    java基础 java 方法 不重复 随机数
  • shell 生成随机数的实现方法总结
    shell 生成随机数的实现方法总结 1. 使用系统的 $RANDOM 变量 mimvp@ubuntu:~$ echo $RANDOM 17617 $RANDOM 的范围是 [0, 32767] 如...
    99+
    2022-06-04
    随机数 方法 shell
  • Java编程实现生成给定范围内不重复随机数的方法小结
    本文实例总结了Java编程实现生成给定范围内不重复随机数的方法。分享给大家供大家参考,具体如下:在Java中的Math类中存在一个random()方法,该方法默认生成0.0到1.0之间的double型随机数;经过稍微处理,就可以产生我们需要...
    99+
    2023-05-31
    java 随机数 ava
  • Java编程实现从给定范围内随机N个不重复数生成随机数的方法小结
    本文实例讲述了Java编程实现从给定范围内随机N个不重复数生成随机数的方法。分享给大家供大家参考,具体如下:一、JAVA中生成随机数的方式在j2se中使用Math.random()令系统随机选取一个0~1之间的double类型小数,将其乘以...
    99+
    2023-05-31
    java 随机数 ava
  • 生成8位随机不重复的数字编号的方法
    复制代码 代码如下: package com.jjinfo.common.util; import java.util.Arrays; import java.util.Random...
    99+
    2022-11-15
    8位随机 数字编号
  • java随机数生成的方法
    本文小编为大家详细介绍“java随机数生成的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“java随机数生成的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。本教程操作环境:windows7系统、java...
    99+
    2023-06-30
  • java随机生成1~15之间不重复的数字
    函数说明:random()方法用于返回一个随机数,随机数范围为 0.0 =< Math.random < 1.0。例如:产生一个0~9之间的整数为:(int)(Math.random()*10);产生一个1~10之间的整数则可以写成:(in...
    99+
    2016-03-22
    java 随机 不重复 数字
  • Python随机值生成的常用方法总结
    目录一、随机整数二、随机浮点数三、随机字符串四、随机数使用到的一些算法一、随机整数 1.包含上下限:[a, b] import random #1、随机整数:包含上下限:[a, b]...
    99+
    2024-04-02
  • VBS中怎么生成不重复随机数
    VBS中怎么生成不重复随机数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。代码如下:dim Z(10),i for i=0&nbs...
    99+
    2023-06-08
  • vb中怎么生成不重复随机数
    在VB中生成不重复的随机数可以通过使用Random类来实现。你可以使用一个数组来存储已生成的随机数,然后在生成随机数时进行判断是否已...
    99+
    2023-08-16
    vb
  • 用Java生成N个不重复的随机数,3种实例
    1、Random类和Set集合来完成 Java实现生成n个不重复的随机数可以使用Java中的Random类和Set集合来完成 具体代码如下: import java.util.HashSet;import java.util.Rand...
    99+
    2023-08-19
    java 算法 数据结构
  • Python生成随机数组的方法小结
    本文实例讲述了Python生成随机数组的方法。分享给大家供大家参考,具体如下: 研究排序问题的时候常常需要生成随机数组来验证自己排序算法的正确性和性能,今天把Python生成随机数组的方法稍作总结,以备以后...
    99+
    2022-06-04
    数组 小结 方法
  • c语言如何生成不重复的随机数
    在C语言中,可以使用以下步骤生成不重复的随机数:1. 引入头文件 `stdlib.h` 和 `time.h`。```c#include #include ```2. 在程序的开始处使用 `srand` 函数初始化随机数种子,以确保每次运...
    99+
    2023-08-11
    c语言
  • java生成随机数的三种方法
    随机数有三种生成方式:通过Math.random()方法通过System.currentTimeMillis()方法获取毫秒数通过Random类第一种:常用方法Math.random()方法,是获取0-1之间的double类型的小数,在通过...
    99+
    2014-08-11
    java入门 java 随机数
  • 使用java怎么实现每次生成不重复的随机数
    使用java怎么实现每次生成不重复的随机数?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作