现在的位置: 首页 > 综合 > 正文

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

2018年05月06日 ⁄ 综合 ⁄ 共 1056字 ⁄ 字号 评论关闭

上次在《【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】在一定的范围内产生不同的随机数》(点击打开链接)上所提到的方法快多了。

抱歉!评论已关闭.