码迷,mamicode.com
首页 > 编程语言 > 详细

【Java】利用Collections类下的shuffle洗牌方法改进在一定的范围内产生不重复的随机数

时间:2015-03-08 09:17:55      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:随机数   java   不重复   shuffle   arraylist   

上次在《【Java】在一定的范围内产生不同的随机数》(点击打开链接)上所提到的方法,尽管已经解决了一定范围内产生不同随机数的问题,运行速度已经可以的,至少不会弄很久都弄不好,其实利用Collections类下的shuffle方法思想可以更清晰、速度更快地在一定的范围内产生不同的随机数。

Collections类下的shuffle方法是可以随机打乱一个数组中的元素的程序,也叫做洗牌方法。

有这个方法,配合我在《【Java】Java中的Collections类——Java中升级版的数据结构》(点击打开链接)中介绍的动态数组ArrayList,此题就已经终结了:

import java.util.*;
public class shuffleTest {
	public static void main(String[] args) {
		//创建一个动态数组
		ArrayList<Integer> randomArr=new ArrayList<Integer>();
		//在里面塞进1-20,你喜欢完全可以改改这个for循环,在里面塞什么都可以
		for(int i=1;i<=20;i++){
			randomArr.add(i);
		}
		//对这个动态数组进行洗牌
		Collections.shuffle(randomArr);
		//打印这个动态数组
		System.out.println(randomArr);
		}	
}

这样就实现了在1-20的范围内生产不重复的随机数,运行结果如下:

技术分享

笔者再于此基础上让程序在1-N范围内产生300组随机数,不重复,以测试此程序的性能,见如下的代码:

import java.util.*;
public class shuffleTest {
	public static void main(String[] args) {
		ArrayList<Integer> randomArr=new ArrayList<Integer>();
		for(int n=1;n<=300;n++){
		System.out.printf("在1-%d的范围内产生随机数,不重复",n);
		for(int i=1;i<=n;i++){
			randomArr.add(i);
		}
		Collections.shuffle(randomArr);
		System.out.println(randomArr);
		randomArr=new ArrayList<Integer>();
		}
	}
}

程序运行结果如下,运行的时候明显速度比上一次《【Java】在一定的范围内产生不同的随机数》(点击打开链接)上所提到的方法快多了。

技术分享

【Java】利用Collections类下的shuffle洗牌方法改进在一定的范围内产生不重复的随机数

标签:随机数   java   不重复   shuffle   arraylist   

原文地址:http://blog.csdn.net/yongh701/article/details/44130897

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!