java.util.Random 分析

 

 
Random()构造函数 有两种:
 
其一:Random()
       创建一个新的随机数生成器。它是以当前时间的毫秒数,为种子。可以通过System.currentTimeMillis()来获得当前时间的毫秒数
其二:Random(long seed)
       使用单个 long 种子创建一个新随机数生成器.
       如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
测试一:使用不带参数的构造方法 .
       测试1 :nextInt(); 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
       public static void main(String[] args) {
              // TODO Auto-generated method stub
              java.util.Random r=new java.util.Random();
 
            for(int i=0;i<10;i++){
 
                System.out.println(r.nextInt());
 
            }
 
       }
       控制台打印:
       -864316554
       -2077454005
       293730977
       -1743870413
       -1424715784
       486969960
       -988141949
       -1930205453
       1550615431
       -1436965049
       测试2 :nextInt(int n); 返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0 (包括)和指定值(不包括)之间均匀分布的 int 值。
       public static void main(String[] args) {
              // TODO Auto-generated method stub
              java.util.Random r=new java.util.Random();
 
            for(int i=0;i<6;i++){
                System.out.println(r.nextInt(7));
            }
       }
       4
       4
       2
       2
       0
       2
       问题:包含重复的数值
      所以,在一定的取值范围内,如何将重复的数值去掉?
      方法一:如果网页的访问频率 ( 时间较短 ) 较高,而又用以当前时间的毫秒数为种子,则可以使用
           try {Thread.sleep(2);} catch(Exception e) {}
      方法二:使用 Set 集合,过滤掉重复的记录
      List searchList = getSearchList();
      Set set = new HashSet();
      Random random = new Random();
      while (set.size() < 6 {
           set.add(searchList(random.nextInt(listSize)));
      }
      思路:从一个集合中随机产生 6 个不重复的记录并显示出来。
      
测试二:使用带参数的构造方法.
       Random random = new Random(7);
       for (int i=0;i<6;i++) {
              System.out.println(i+":"+random.nextInt());
       }
       0:-1156638823
       1:-1552468968
       2:-1077308326
       3:41356089
       4:1495978761
       5:2107132509
       总结:所以,如果用构造一个指定种子的 Random, 则,
           如果所指定的种子相同 ( 本例为 7) ,且调用的方法相同 ( 本例为 random.nextInt()) ,则产生的随机数也相同。
      
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值