随机工具类 - RandomUtil
# 随机工具类 - RandomUtil
简介
RandomUtil
是 Hutool 提供的一个用于生成随机数、随机字符串、随机元素等的工具类。它基于 JDK 中的 Random
对象进行了封装,虽然 Java 生成的随机数是伪随机数,但对于大多数应用场景来说,这样的随机结果已经足够使用。
# 1. 生成随机整数
RandomUtil
提供了 randomInt
方法,用于生成指定范围内的随机整数。
import cn.hutool.core.util.RandomUtil;
public class RandomUtilExample {
public static void main(String[] args) {
// 生成一个 [10, 100) 范围内的随机整数
int randomInt = RandomUtil.randomInt(10, 100);
System.out.println("生成的随机整数: " + randomInt);
}
}
2
3
4
5
6
7
8
9
randomInt(int min, int max)
:生成一个在[min, max)
范围内的随机整数。min
:随机数的最小值(包含)。max
:随机数的最大值(不包含)。
作用: 该方法适用于需要生成指定范围内随机整数的场景,如生成随机 ID、验证码等。
实际开发场景: 在进行抽奖、随机生成数据或需要模拟随机行为时,可以使用此方法生成随机整数。
# 2. 生成随机字节数组
RandomUtil
提供了 randomBytes
方法,用于生成指定长度的随机字节数组,通常用于生成加密盐值或密码等场景。
import cn.hutool.core.util.RandomUtil;
public class RandomUtilExample {
public static void main(String[] args) {
// 生成一个长度为 10 的随机字节数组
byte[] randomBytes = RandomUtil.randomBytes(10);
System.out.println("生成的随机字节数组: " + java.util.Arrays.toString(randomBytes));
}
}
2
3
4
5
6
7
8
9
randomBytes(int length)
:生成一个指定长度的随机字节数组。length
:字节数组的长度。
作用: 该方法适用于需要生成随机字节数据的场景,如生成加密盐、随机密钥等。
实际开发场景: 在安全相关的开发中,如生成密码、密钥或其他随机字节数据时,可以使用此方法。
# 3. 从列表中随机获取元素
RandomUtil
提供了 randomEle
方法,用于从列表中随机获取一个元素。
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.collection.CollUtil;
import java.util.List;
public class RandomUtilExample {
public static void main(String[] args) {
List<String> elements = CollUtil.newArrayList("a", "b", "c", "d", "e");
// 从列表中随机获取一个元素
String randomElement = RandomUtil.randomEle(elements);
System.out.println("随机获取的元素: " + randomElement);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
randomEle(List<T> list)
:从列表中随机获取一个元素。list
:要从中获取元素的列表。
作用: 该方法适用于从列表中随机选择一个元素的场景,如随机抽取用户、随机选择配置项等。
实际开发场景: 在需要从一个候选列表中随机选择一个元素时,可以使用此方法。
# 4. 从列表中随机获取多个不重复元素
RandomUtil
提供了 randomEleSet
方法,用于从列表中随机获取多个不重复的元素,并返回一个 LinkedHashSet
。
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.collection.CollUtil;
import java.util.Set;
public class RandomUtilExample {
public static void main(String[] args) {
List<Integer> elements = CollUtil.newArrayList(1, 2, 3, 4, 5, 6);
// 随机获取两个不重复的元素
Set<Integer> randomSet = RandomUtil.randomEleSet(elements, 2);
System.out.println("随机获取的不重复元素: " + randomSet);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
randomEleSet(List<T> list, int count)
:从列表中随机获取count
个不重复的元素,返回一个LinkedHashSet
。list
:要从中获取元素的列表。count
:要获取的不重复元素的数量。
作用: 该方法适用于从列表中随机选择多个不重复元素的场景,如抽奖、随机分组等。
实际开发场景: 在需要从一个候选列表中随机选择多个不重复元素时,可以使用此方法。
# 5. 生成随机字符串
RandomUtil
提供了 randomString
和 randomNumbers
方法,分别用于生成随机字符串和只包含数字的随机字符串。
import cn.hutool.core.util.RandomUtil;
public class RandomUtilExample {
public static void main(String[] args) {
// 生成一个长度为 8 的随机字符串
String randomStr = RandomUtil.randomString(8);
System.out.println("生成的随机字符串: " + randomStr);
// 生成一个长度为 6 的只包含数字的随机字符串
String randomNumStr = RandomUtil.randomNumbers(6);
System.out.println("生成的随机数字字符串: " + randomNumStr);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
randomString(int length)
:生成一个指定长度的随机字符串,包含数字和字母。length
:随机字符串的长度。
randomNumbers(int length)
:生成一个指定长度的只包含数字的随机字符串。length
:随机字符串的长度。
作用: 这些方法适用于生成随机验证码、随机密码或其他随机字符串的场景。
实际开发场景: 在需要生成随机密码、验证码、票据号等随机字符串时,可以使用这些方法。
# 6. 权重随机生成器
RandomUtil
提供了 weightRandom
方法,用于根据权重随机生成对象。该方法接收一个带权重的对象列表,并根据权重随机选择一个对象。
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.WeightRandom;
import java.util.ArrayList;
import java.util.List;
public class RandomUtilExample {
public static void main(String[] args) {
List<WeightRandom.WeightObj<String>> weightObjs = new ArrayList<>();
weightObjs.add(new WeightRandom.WeightObj<>("A", 10));
weightObjs.add(new WeightRandom.WeightObj<>("B", 20));
weightObjs.add(new WeightRandom.WeightObj<>("C", 70));
// 根据权重随机生成对象
WeightRandom<String> weightRandom = RandomUtil.weightRandom(weightObjs);
String randomObj = weightRandom.next();
System.out.println("根据权重随机生成的对象: " + randomObj);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
weightRandom(List<WeightRandom.WeightObj<T>> weightObjs)
:根据权重生成随机对象。weightObjs
:带有权重的对象列表。
作用: 该方法适用于需要根据权重随机选择对象的场景,如抽奖、物品掉落、事件触发等。
实际开发场景: 在游戏开发或需要根据权重分配资源的场景下,可以使用此方法实现权重随机选择。
通过 RandomUtil
提供的功能,开发者可以轻松实现各种随机行为,包括随机数、随机字符串、随机元素的生成,以及根据权重随机选择对象。这些工具方法在实际开发中广泛适用于各种需要随机操作的场景。