zoukankan      html  css  js  c++  java
  • java 无重复生成一个范围内的随机数

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 import java.util.Random;
     4 
     5 
     6 public class RandRange {
     7 
     8     public List<Integer> get(int start, int end){
     9         int cnt = end - start + 1;//计算从start到end之间数字的个数。
    10         List<Integer> randRes = new ArrayList<Integer>();
    11         for(int i = start;i<=end;i++){
    12             randRes.add(i);//初始化一个数组,正序
    13         }
    14         Random r=new Random();
    15         while(cnt-->1){
    16             int rand_sub = r.nextInt((int) cnt);//生成一个[0,cnt)的整数,作为我们要选择的随机下标
    17             int temp = randRes.get(cnt);                     /*交换随机下标所指定的元素与最后一个元素,然后cnt--,一次类推。也就是说,我们把随机
    18             randRes.set(cnt, randRes.get(rand_sub));         选出来的元素都排在了最后,而随机下标被cnt限制在前面未被选择的元素序列范围中,直到全部                                      被选择过,循环结束。算法复杂度可以控制在o(n)*/
    19             randRes.set(rand_sub,temp);
    20         }
    21         return randRes;
    22     }
    23     public static void main(String[] args) {
    24         RandRange r = new RandRange();
    25         List<Integer> rand_array = r.get(0,11);
    26         System.out.println(rand_array);
    27     }
    28 }

    上述代码可以生成指定闭区间的无重复随机数。

    其实之所以写这个算法是为了给采集器分配采集任务,为了避免被数据源发现,所以用了随机数。采集的对象是百度百科,他的网页是按照数字排列的。

    关注分布式存储技术以及分布式计算方法
  • 相关阅读:
    thymeleaf 模板使用 之 解决因HTML标签未闭合引起的错误
    Spring MVC 拦截器
    Spring boot data jpa 示例
    Hibernate 数据库方言
    Springboot 之 静态资源路径配置
    Java 时间不一致
    IntelliJ IDEA 2017.3.2 热加载(Hot Swap)
    IntelliJ IDEA Spring boot devtools 实现热部署
    Python-集合
    Python-文件读写及修改
  • 原文地址:https://www.cnblogs.com/colorfulkoala/p/3036733.html
Copyright © 2011-2022 走看看