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 }
上述代码可以生成指定闭区间的无重复随机数。
其实之所以写这个算法是为了给采集器分配采集任务,为了避免被数据源发现,所以用了随机数。采集的对象是百度百科,他的网页是按照数字排列的。
关注分布式存储技术以及分布式计算方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?