生成n个不重复的随机数 不包括最大值

/****
	 * 生成n个不重复的随机数
	 * @param min
	 * @param max
	 * @param n
	 * @return
	 */
	public static void randomSet(int min, int max, int n, HashSet<Integer> set) {  
	       if (n > (max - min + 1) || max < min) {  
	           return;  
	       }  
	       for (int i = 0; i < n; i++) {  
	           // 调用Math.random()方法  
	           int num = (int) (Math.random() * (max - min)) + min;
	           
	         boolean flag=set.add(num);// 将不同的数存入HashSet中  
	         if(flag==false){
	        	 randNumSet(flag,set,max,min,num);
	         }
	       }  
	       int setSize = set.size();  
	       // 如果存入的数小于指定生成的个数,则调用递归再生成剩余个数的随机数,如此循环,直到达到指定大小  
	       if (setSize < n) {  
	        randomSet(min, max, n - setSize, set);// 递归  
	       }  
	   }
	public static void randNumSet(boolean flag,HashSet<Integer> set,int max,int min,int num){
		 if(flag==false){
       	  num = (int) (Math.random() * (max - min)) + min;		           
       	  flag=set.add(num);// 将不同的数存入HashSet中  
       	  if(flag==false){
       		 randNumSet(flag,set,max,min,num);
       	  }
        }
	}

  jdk1.7后中ThreadLocalRandom类,由于底层的实现机制不同,ThreadLocalRandom的性能是远高于Random,建议后面大家在技术选型的时候优先使用ThreadLocalRandom

 ThreadLocalRandom random=ThreadLocalRandom.current();
        System.out.println(random.nextInt(10));

 

posted on 2022-12-19 16:32  让代码飞  阅读(36)  评论(0编辑  收藏  举报

导航

一款免费在线思维导图工具推荐:https://www.processon.com/i/593e9a29e4b0898669edaf7f?full_name=python