文档章节

java 生成无重复 随机数

@ccny
 @ccny
发布于 2016/08/31 14:51
字数 263
阅读 128
收藏 3

一、实现逻辑

      1.需要一个固定的数据集。

       2.从数据集中随机去除当前索引的数据,并移除生成。并重复生成多个。

二、编码

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Random;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author liushuaic
 * @date 2016-08-31 13:49
 * @desc 随机生成类
 * **/
public class RandomUtils {
	
	private static Logger logger=LoggerFactory.getLogger(RandomUtils.class);
	
	/**
	 * @author liushuaic
	 * @date 2016-08-31  14:17
	 * @desc 随机不重复的数据
	 * */
	public static int[] randomNumber(int maxNumber,int rtnCount) throws Exception{
		logger.info("starTime:"+Calendar.getInstance().getTimeInMillis());
		if(maxNumber == 0){
			throw new Exception("maxNnumber 不能为 0");
		}
		if(rtnCount == 0){
			throw new Exception("rtnCount 不能为 0");
		}
		//logger.info("maxNumber:"+maxNumber+"rtnCount:"+rtnCount);
		if(rtnCount>maxNumber){
			throw new ArrayIndexOutOfBoundsException("rtnCount 不能大于 maxNumber");
		}
		List<Integer> chacheArray=new ArrayList<Integer>();
		int[] rtnNumber=new int[rtnCount];
		for(int i=1;i<=maxNumber;i++){
			chacheArray.add(Integer.valueOf(i));
		}
		for(int j=0;j<rtnCount;j++){
			int index=new Random().nextInt(chacheArray.size());
			int val=chacheArray.get(index);
			rtnNumber[j]=val;
			chacheArray.remove(index);
			//logger.info("rtnData--index:"+j+" value:"+val);
		}
		logger.info("endTime:"+Calendar.getInstance().getTimeInMillis());
		return rtnNumber;
	}
	
	public static void main(String[] args) {
		try {
			RandomUtils.randomNumber(1000000, 10000);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

三、测试结果 

      1.给出100W的长度,取出1W个

      

     2.时间长度1.226秒

© 著作权归作者所有

共有 人打赏支持
上一篇: linux apache 安装
下一篇: java socket
@ccny

@ccny

粉丝 14
博文 113
码字总数 26759
作品 0
东城
架构师
私信 提问
RHEL7下Tomcat启动慢的原因及解决方案

分析结果 主要原因是生成随机数的时候卡住了,导致tomcat启动不了。 是否有足够的熵来用于产生随机数,可以通过如下命令来查看 [root@tomcat tools]# cat /proc/sys/kernel/random/entropy_a...

有功夫
2018/05/30
0
0
浅谈Java中的几种随机数

众所周知,随机数是任何一种编程语言最基本的特征之一。而生成随机数的基本方式也是相同的:产生一个0到1之间的随机数。看似简单,但有时我们也会忽略了一些有趣的功能。 我们从书本上学到什...

彭博
2012/11/27
473
0
浅谈Java中的几种随机数

众所周知,随机数是任何一种编程语言最基本的特征之一。而生成随机数的基本方式也是相同的:产生一个0到1之间的随机数。看似简单,但有时我们也会忽略了一些有趣的功能。 我们从书本上学到什...

迷途d书童
2012/03/21
44.1K
14
Java 编程之美:并发编程高级篇之一

本文来自作者 追梦 在 GitChat 上分享 「Java 编程之美:并发编程高级篇之一」 编辑 | 工藤 前言 借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了。 ...

gitchat
2018/05/24
0
0
Fork/Join模式(JSR166y)手记之ThreadLocalRandom

ThreadLocalRandom是一个可以独立使用的、用于生成随机数的类。继承自Random,但性能超过Random,所谓“青出于蓝而胜于蓝”。其API所提供方法,不多,父类Random具有的,它也一样具有。从表明...

goto-array
2013/09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

记录replugin使用的一个坑

反复编译插件放入宿主中,一直出现如下错误: android.content.res.Resources$NotFoundException: Resource ID #0x7f050000 type #0x5 is not valid 回滚代码,重启AS还是出错。最终发现将宿...

Gemini-Lin
今天
2
0
Vert.x系列(二)--EventBusImpl源码分析

前言:Vert.x 实现了2种完成不同的eventBus: EventBusImpl(A local event bus implementation)和 它的子类 ClusteredEventBus(An event bus implementation that clusters with other Ve......

冷基
今天
2
0
Perl - 获取文件项目

参考:http://www.runoob.com/perl/perl-directories.html 下面返回JSON格式的文件列表 #!/usr/bin/perluse strict;use warnings;use utf8;use feature ':5.26';require Fi......

wffger
昨天
3
0
vue组件系列3、查询下载

直接源码,虽然样式样式不好看,逻辑也不是最优,但是可以留作纪念。毕竟以后类似的功能只需要优化就可以了,不用每次都重头开始。。。 <template> <div class="pre_upload"> <div ...

轻轻的往前走
昨天
3
0
java浅复制和深复制

之前写了数组的复制,所以这里继续总结一下浅复制和深复制。 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝。 深拷贝:对基本数据类型进行值传递,对引用数据类型,...

woshixin
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部