【Java】利用Collections类下的shuffle洗牌方法改进在一定的范围内产生不重复的随机数
上次在《【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】在一定的范围内产生不同的随机数》(点击打开链接)上所提到的方法快多了。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。