在Java中,生成不重复的随机数是常见的开发需求,可以通过利用Java提供的API如:Math和Random类,结合集合类进行实现。

一、使用Math类生成随机数

Java的Math类中的random方法可以生成[0.0, 1.0)间的随机小数,我们可以通过乘以范围并进行类型转换,生成我们需要范围内的随机整数。

但是由于单个数的随机性,可能存在重复情况,因此我们需要使用集合类如Set来存储生成的随机数。由于Set的特性,它可以帮助我们去掉重复的随机数。

 import java.util.HashSet; import java.util.Set; public class RandomNumber { public static void main(String[] args) { Set set = new HashSet<>(); // generate 10 random numbers while (set.size() < 10) { int num = (int) (Math.random() * 30); // generate numbers from 0 to 29 set.add(num); } System.out.println(set); } } 

二、使用Random类生成随机数

Java的Random类提供了更多种类的随机数生成方法,nextXxx方法可以生成各种数据类型的随机数。

使用Random类生成不重复随机数同样可以结合集合类,以保证生成的随机数是不重复的。

 import java.util.HashSet; import java.util.Random; import java.util.Set; public class RandomNumber { public static void main(String[] args) { Set set = new HashSet<>(); Random random = new Random(); // generate 10 random numbers while (set.size() < 10) { int num = random.nextInt(30); // generate numbers from 0 to 29 set.add(num); } System.out.println(set); } } 

三、产生一定范围内的不重复随机数

如果需要生成的不重复随机数在一个大范围内,比如1-1000000,那么可以先生成这个范围内的所有数,然后再进行随机打乱。

可以先将这些数存入ArrayList中,然后通过Collections.shuffle方法进行打乱。

 import java.util.ArrayList; import java.util.Collections; import java.util.List; public class RandomNumber { public static void main(String[] args) { List list = new ArrayList<>(); // add numbers from 1 to 1000000 for (int i = 1; i <= 1000000; i++) { list.add(i); } // shuffle the list Collections.shuffle(list); // print the first 10 numbers for (int i = 0; i < 10; i++) { System.out.println(list.get(i)); } } }