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)
java 随机数高效生成的更多相关文章
- java随机数的生成
我们经常会用到随机数的生成,作为唯一性的id或者标识: long now = System.currentTimeMillis(); SimpleDateFormat dateFormat=new S ...
- 史上最全的java随机数/字符串生成算法(转)
代码如下: package com.zuidaima.core.util; import java.util.Random; public class RandomUtil { public stat ...
- java 随机数的生成
生成10个不小于100000的6位数 public static void main(String[] args) { Random random = new Random(); for (int i ...
- Java 随机数
本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 广义上讲,Java中的随机数的有三种产生方式:(01). 通过System.currentTimeMillis()来获取一个当前时间 ...
- Java随机数
本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 广义上讲,Java中的随机数的有三种产生方式:(01). 通过System.currentTimeMillis()来获取一个当前时间 ...
- 利用Java随机,生成随机学生数据
为模拟向数据库中大量插入学生数据(注:此处应该用PreparedStatement.batchUpdate等批处理提高效率)的情形,通过Java随机来生成学生数据. 一.要生成的学生数据 studen ...
- Java随机数和UUID
Java随机数和UUID Java随机数 在Java项目中通常是通过Math.random方法和Random类来获得随机数,前者通过生成一个Random类的实例来实现. 此类产生的是一组伪随机数流,通 ...
- Java订单号生成,唯一订单号(日均千万级别不重复)
Java订单号生成,唯一订单号 相信大家都可以搜索到很多的订单的生成方式,不懂的直接百度.. 1.订单号需要具备以下几个特点. 1.1 全站唯一性. 1.2 最好可读性. 1.3 随机性,不能重复,同 ...
- (转)Java随机数
1 随机数的三种产生方式 本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 广义上讲,Java中的随机数的有三种产生方式: (01). 通过System.currentTimeMil ...
随机推荐
- [LeetCode] Maximum Length of Repeated Subarray 最长的重复子数组
Given two integer arrays A and B, return the maximum length of an subarray that appears in both arra ...
- [LeetCode] Maximum Product of Three Numbers 三个数字的最大乘积
Given an integer array, find three numbers whose product is maximum and output the maximum product. ...
- Mac 下升级 vim 并自己配置 vim 的过程
1.升级 vim 我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim -- ...
- [HNOI2016]最小公倍数
题目描述 给定一张N个顶点M条边的无向图(顶点编号为1,2,...,n),每条边上带有权值.所有权值都可以分解成2a∗3b2^a*3^b2a∗3b 的形式. 现在有q个询问,每次询问给定四个参数u.v ...
- ●BZOJ 3931 [CQOI2015]网络吞吐量
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3931 题解: 在最短路图上跑网络流,要开long long(无奈 BZOJ AC 不了,洛谷 ...
- [BZOJ]1011 遥远的行星(HNOI2008)
由eps引发的血案. Description 直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=A*J.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) ...
- [bzoj4162]shlw loves matrix II
来自FallDream的博客,未经允许,请勿转载,谢谢 给定矩阵k*k的矩阵M,请计算 M^n,并将其中每一个元素对 1000000007 取模输出. k<=50 n<=2^10000 考 ...
- 笔记10 在XML中声明切面(1)
1.无注解的Audience package XMLconcert; public class Audience { public void silenceCellPhones() { System. ...
- 华科机考:a+b
时间限制:1秒空间限制:32768K 题目描述 计算a+b的和 每行包行两个整数a和b 对于每行输入对应输出一行a和b的和 输入 1 5 输出 6 吐槽:这尼玛是机考题? 代码: #include & ...
- gray-code (格雷码)
题目描述 The gray code(格雷码) is a binary numeral system where two successive values differ in only one bi ...