1 import java.util.Random;
2 import java.util.concurrent.ThreadLocalRandom;
3 import org.apache.commons.lang3.RandomUtils;
4 import org.apache.commons.math3.random.RandomDataGenerator;
5
6 /**
7 * @ClassName: RandomUtil
8 * @Description: 随机数工具类
9 * (分别使用java.util.Random、Apache Common Math3、Apache Common Lang3、TreadLocalRandom)
10 */
11 public class RandomUtil {
12 /**
13 * 随机数Int的生成
14 */
15 // 随机数生成无边界的Int
16 public static int getRandomForIntegerUnbounded() {
17 int intUnbounded = new Random().nextInt();
18 System.out.println(intUnbounded);
19 return intUnbounded;
20 }
21
22 // 生成有边界的Int
23 public static int getRandomForIntegerBounded(int min, int max) {
24 int intBounded = min + ((int) (new Random().nextFloat() * (max - min)));
25 System.out.println(intBounded);
26 return intBounded;
27 }
28
29 // 包含1而不包含10
30 // 使用Apache Common Math3来生成有边界的Int
31 public static int getRandomForIntegerBounded2(int min, int max) {
32 int intBounded = new RandomDataGenerator().nextInt(min, max);
33 System.out.println(intBounded);
34 return intBounded;
35 }
36
37 // 包含1且包含10
38 // 使用Apache Common Lang3的工具类来生成有边界的Int
39 public static int getRandomForIntegerBounded3(int min, int max) {
40 int intBounded = RandomUtils.nextInt(min, max);
41 System.out.println(intBounded);
42 return intBounded;
43 }
44
45 // 使用TreadLocalRandom来生成有边界的Int,包含min而不包含max
46 public static int getRandomForIntegerBounded4(int min, int max) {
47 int threadIntBound = ThreadLocalRandom.current().nextInt(min, max);
48 System.out.println(threadIntBound);
49 return threadIntBound;
50 }
51
52 /**
53 * 随机数Long的生成
54 */
55 // 随机数生成无边界的Long
56 public static long getRandomForLongUnbounded() {
57 long unboundedLong = new Random().nextLong();
58 System.out.println(unboundedLong);
59 return unboundedLong;
60 }
61
62 // 因为Random类使用的种子是48bits,所以nextLong不能返回所有可能的long值,long是64bits。
63 // 使用Random生成有边界的Long
64 public static long getRandomForLongBounded(long min, long max) {
65 long rangeLong = min + (((long) (new Random().nextDouble() * (max - min))));
66 System.out.println(rangeLong);
67 return rangeLong;
68 }
69
70 // 使用Apache Commons Math3来生成有边界的Long(RandomDataGenerator类提供的生成随机数的方法)
71 public static long getRandomForLongBounded2(long min, long max) {
72 long rangeLong = new RandomDataGenerator().nextLong(min, max);
73 System.out.println(rangeLong);
74 return rangeLong;
75 }
76
77 // 使用Apache Commons Lang3的工具类来生成有边界的Long(RandomUtils提供了对java.util.Random的补充)
78 public static long getRandomForLongBounded3(long min, long max) {
79 long longBounded = RandomUtils.nextLong(min, max);
80 System.out.println(longBounded);
81 return longBounded;
82 }
83
84 // 使用ThreadLocalRandom生成有边界的Long
85 public static long getRandomForLongBounded4(long min, long max) {
86 long threadLongBound = ThreadLocalRandom.current().nextLong(min, max);
87 System.out.println(threadLongBound);
88 return threadLongBound;
89 }
90
91 /**
92 * 随机数Float的生成
93 */
94 // 随机数Float的生成生成0.0-1.0之间的Float随机数
95 public static float getRandomForFloat0To1() {
96 float floatUnbounded = new Random().nextFloat();
97 System.out.println(floatUnbounded);
98 return floatUnbounded;
99 }
100
101 // 以上只会生成包含0.0而不包括1.0的float类型随机数生成有边界的Float随机数
102 public static float getRandomForFloatBounded(float min, float max) {
103 float floatBounded = min + new Random().nextFloat() * (max - min);
104 System.out.println(floatBounded);
105 return floatBounded;
106 }
107
108 // 使用Apache Common Math来生成有边界的Float随机数
109 public static float getRandomForFloatBounded2(float min, float max) {
110 float randomFloat = new RandomDataGenerator().getRandomGenerator().nextFloat();
111 float generatedFloat = min + randomFloat * (max - min);
112 System.out.println(generatedFloat);
113 return generatedFloat;
114 }
115
116 // 使用Apache Common Lang来生成有边界的Float随机数
117 public static float getRandomForFloatBounded3(float min, float max) {
118 float generatedFloat = RandomUtils.nextFloat(min, max);
119 System.out.println(generatedFloat);
120 return generatedFloat;
121 }
122
123 // 使用ThreadLocalRandom生成有边界的Float随机数
124 // ThreadLocalRandom类没有提供
125
126 /**
127 * 随机数Double的生成
128 */
129 // 生成0.0d-1.0d之间的Double随机数
130 public static double getRandomForDouble0To1() {
131 double generatorDouble = new Random().nextDouble();
132 System.out.println(generatorDouble);
133 return generatorDouble;
134 }
135
136 // 与Float相同,以上方法只会生成包含0.0d而不包含1.0d的随机数生成带有边界的Double随机数
137 public static double getRandomForDoubleBounded(double min, double max) {
138 double boundedDouble = min + new Random().nextDouble() * (max - min);
139 System.out.println(boundedDouble);
140 return boundedDouble;
141 }
142
143 // 使用Apache Common Math来生成有边界的Double随机数
144 public static double getRandomForDoubleBounded2(double min, double max) {
145 double boundedDouble = new RandomDataGenerator().getRandomGenerator().nextDouble();
146 double generatorDouble = min + boundedDouble * (max - min);
147 System.out.println(generatorDouble);
148 return generatorDouble;
149 }
150
151 // 使用Apache Common Lang生成有边界的Double随机数
152 public static double getRandomForDoubleBounded3(double min, double max) {
153 double generatedDouble = RandomUtils.nextDouble(min, max);
154 System.out.println(generatedDouble);
155 return generatedDouble;
156 }
157
158 // 使用ThreadLocalRandom生成有边界的Double随机数
159 public static double getRandomForDoubleBounded4(double min, double max) {
160 double generatedDouble = ThreadLocalRandom.current().nextDouble(min, max);
161 System.out.println(generatedDouble);
162 return generatedDouble;
163 }
164 }
1 //相关依赖
2 <dependency>
3 <groupId>org.apache.commons</groupId>
4 <artifactId>commons-lang3</artifactId>
5 <version>3.3.2</version>
6 </dependency>
7 <!-- commons-math3 -->
8 <dependency>
9 <groupId>org.apache.commons</groupId>
10 <artifactId>commons-math3</artifactId>
11 <version>3.6.1</version>
12 </dependency>