Android 如何生成不重复随机数

在 Android 开发中生成不重复的随机数通常涉及到生成一个随机数集合,并确保这些数值不重复。可以使用多种方法来实现这一目标。以下是详细的步骤和代码示例,使用 Java 语言进行说明:

方法一:使用 Collections.shuffleList

  1. 创建一个包含所有可能随机数的列表: 生成一个包含所有可能值的列表,如从 1 到 N 的整数列表。

  2. 打乱列表的顺序: 使用 Collections.shuffle() 方法随机打乱列表中的元素顺序。

  3. 选择前 K 个元素: 从打乱后的列表中选择前 K 个元素作为最终的不重复随机数。

示例代码

java
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class UniqueRandomNumbers { public static List<Integer> generateUniqueRandomNumbers(int min, int max, int count) { // 创建一个包含所有可能值的列表 List<Integer> numbers = new ArrayList<>(); for (int i = min; i <= max; i++) { numbers.add(i); } // 打乱列表 Collections.shuffle(numbers); // 获取前 count 个元素作为不重复的随机数 return numbers.subList(0, count); } public static void main(String[] args) { int min = 1; // 最小值 int max = 100; // 最大值 int count = 10; // 需要的随机数个数 List<Integer> randomNumbers = generateUniqueRandomNumbers(min, max, count); System.out.println(randomNumbers); } }

方法二:使用 SetRandom

  1. 使用 HashSet 存储随机数Set 数据结构可以确保存储的不重复。

  2. 生成随机数并添加到 Set: 使用 Random 类生成随机数,并将这些随机数添加到 Set 中,直到 Set 达到所需的大小。

示例代码

java
import java.util.HashSet; import java.util.Random; import java.util.Set; public class UniqueRandomNumbers { public static Set<Integer> generateUniqueRandomNumbers(int min, int max, int count) { if (count > (max - min + 1)) { throw new IllegalArgumentException("Count cannot be greater than the range of numbers"); } Random random = new Random(); Set<Integer> uniqueNumbers = new HashSet<>(); while (uniqueNumbers.size() < count) { int number = random.nextInt((max - min + 1)) + min; uniqueNumbers.add(number); } return uniqueNumbers; } public static void main(String[] args) { int min = 1; // 最小值 int max = 100; // 最大值 int count = 10; // 需要的随机数个数 Set<Integer> randomNumbers = generateUniqueRandomNumbers(min, max, count); System.out.println(randomNumbers); } }

总结

  • 方法一:使用 Collections.shuffleList,通过生成一个包含所有可能值的列表并打乱顺序,确保生成的不重复随机数。
  • 方法二:使用 SetRandom,通过随机生成数并存储在 Set 中,自动去重,直到获得所需数量的随机数。

关键字

Android, 随机数, 不重复, Collections.shuffle, HashSet, Random, 生成随机数, 列表打乱, Set 数据结构