 随机工具类 - RandomUtil
随机工具类 - 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 提供的功能,开发者可以轻松实现各种随机行为,包括随机数、随机字符串、随机元素的生成,以及根据权重随机选择对象。这些工具方法在实际开发中广泛适用于各种需要随机操作的场景。
