java 随机数高效生成

分享牛,分享牛原创。近期去面试经常被问到java如何生产随机数,以及生成很大的字符串保证不能重复,还要考虑性能,之前本人面试别人的时候,可能不会问这个问题。既然这个java随机数问题经常被问到,那咱们也就写几种实现方式吧。仅供参考。

1.1.1. 第一种方式

第一种方式,咱们考虑一下,生成的字符串不能重复,怎么办呢?首先想到hashMap、hashSet的特性吧。那怎么就先用这种方式实现吧。以下是hashMap的实现方式。

public static void main(String[] args) {
        Object[] values = new Object[100];
        Random random = new Random();
        HashMap<Object, Object> hashMap = new HashMap<Object, Object>(50);
        // 生成随机数字并存入HashMap
        for(int i = 0;i < values.length;i++){
            int number = random.nextInt(100) + 1;
            hashMap.put(number, i);
        }
        values=hashMap.keySet().toArray();
     // 遍历数组并打印数据
        for(int i = 0;i < values.length;i++){
            System.out.print(values[i] + "\t");
        }
}

这里需要注意的就是hashMap中的增长因子的问题了。要尽量避免HashMap中的数组扩容问题。

hashMap中的构造函数两个参数的含义:

   初始容量,加载因子。

1.1.2. 第二种方式

可以把希望生成的值放入到一个数组中,然后程序随机去读取数组中任意两个坐标,如果坐标相等则继续随机,如果坐标不相等,就交换两个坐标的值。具体的实现如下:

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] + "\t");
        }

1.1.3. 总结

个人觉得数组第二种的方式比较快,因为数组的访问速度快。这也是数组结构决定的。

分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519)

时间: 2024-11-13 06:38:17

java 随机数高效生成的相关文章

Java随机数的产生方式

本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 广义上讲,Java中的随机数的有三种产生方式: (01). 通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字. (02). 通过Math.random()返回一个0到1之间的double值. (03). 通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大. 第1种 通过System.currentTimeMillis()来获取随机数.实际上是获取当前时间毫

java随机数类Random简介

Java实用工具类库中的类java.util.Random提供了产生各种类型随机数的方法.它可以产生int.long.float.double以及Goussian等类型的随机数.这也是它与java.lang.Math中的方法Random()最大的不同之处,后者只产生double型的随机数. 类Random中的方法十分简单,它只有两个构造方法和六个普通方法. 构造方法: (1)public Random() (2)public Random(long seed) Java产生随机数需要有一个基值s

java实现随机生成UUID_java

java实现随机生成UUID public class IDGenerator { private static long num=0; /** * 随机生成UUID * @return */ public static synchronized String getUUID(){ UUID uuid=UUID.randomUUID(); String str = uuid.toString(); String uuidStr=str.replace("-", ""

我想问关于java随机数的问题,这两个随机获取哪个好?

问题描述 我想问关于java随机数的问题,这两个随机获取哪个好? 第一个: public static void SuiJiZiFuChuan(int x, int y) { for (int j = 0; j < y; j++) { for (int i = 0; i < x; i++) { int a = (int) (100 * Math.random() + 100 * Math.random()); //区别在这里,那个好 while (true) { if (a > 96 &

反射-java代码实现生成一套表中的数据,包括表的关联关系

问题描述 java代码实现生成一套表中的数据,包括表的关联关系 在a表中生成一套a表中的数据,只是一个字段值不一样而已,并且还要生成表的关系关系 相当于在原来表关系的基础上在生成一套新的数据.

java中如何生成可执行的jar文件

java中如何生成可执行的jar文件 最简单的方法就是: jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$myAct ionListener.class CardLayoutDemo.class myClosingListener.class myPanel.class jar命令为java自带的专用打包工具: c代表生成新的jar包: e代表可执行的类,亦即main方法所在的类.如果该类有所属的包,书

java 怎么随机生成字符串显示在jsp页面上

问题描述 java 怎么随机生成字符串显示在jsp页面上 如上我要点击一个按钮生成一个随机的用户, 用户账号是一个随机的字符串,我还需要获得产生随机的次数,来统计 解决方案 1.直接用random生成数字,然后把数字拼接 2.创建字符数组,然后random出数字,获取对应数字下标的字符,再拼接 解决方案二: 一种是楼上说的方法,另一种就是你要记录次数,用数据库来生成 解决方案三: 用UUID生成,存进数据库,在数据库中统计次数 解决方案四: 你字符串要什么格式的(汉字,英文大小写,数字,特殊符号

利用随机数随机生成指定位数的字符串

关于随机生成密码的软件很多,js也可以利用随机数随机生成指定位数的密码.(小白学习记录,谢谢支持) js中关于随机数的Math对象中有一个Math.random()的函数,可以随机生成0-1之间的随机任意的数字.本实例利用该函数与Math.floor()函数随机生成字符串. 代码如下: </pre><pre name="code" class="html"><body> <div> 所需位数:<input typ

java根据模板生成word文档,要求可以在Android上打开文档

问题描述 java根据模板生成word文档,要求可以在Android上打开文档 求一个方法,可以按照模板生成word文档,可以在android系统上打开.xml文件生成的模板不能再安卓上,即wps上打开.POI可以打开,可是我不知道怎么将查询到了结果集循环写入表格,求解