
Обычно мы используем следующие способы генерации случайного числа в Java.
1. ThreadLocalRandom (JDK 1.7)
// Генерируем число от 0 до 9
int index = ThreadLocalRandom.current().nextInt(10);
2. Случайный ()
// Генерируем число от 0 до 9
Random random = new Random();
int index = random.nextInt(10);
3. Math.random ()
// Генерируем число от 0 до 9
int index = (int)(Math.random()*10);
Заметка
1. Для одного потока разница в производительности невелика, просто выберите то, что вы хотите.
2. Для нескольких потоков рекомендуется использовать ThreadLocalRandom , Random является поточно-ориентированным, но если несколько потоков используют один и тот же экземпляр Random, это приводит к высокой конкуренции (несколько потоков продолжают использовать один и тот же «случайный» метод генератора) и снижает производительность. ThreadLocalRandom решает эту проблему путем создания случайного экземпляра для каждого потока.
Прочитайте эту темуLocalRandom JavaDoc .
В этом уроке мы покажем вам, как использовать вышеуказанные методы для получения случайного элемента из списка.
1. ThreadLocalRandom
ThreadLocalRandom пример, чтобы получить случайный элемент из ArrayList.
ThreadLocalRandomExample.java
package com.mkyong;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
public class ThreadLocalRandomExample {
public static void main(String[] args) {
List list = new ArrayList();
list.add(10);
list.add(20);
list.add(30);
list.add(40);
list.add(50);
ThreadLocalRandomExample obj = new ThreadLocalRandomExample();
for(int i = 0; i < 10; i++){
System.out.println(obj.getRandomList(list));
}
}
public int getRandomList(List list) {
// 0-4
int index = ThreadLocalRandom.current().nextInt(list.size());
System.out.println("nIndex :" + index );
return list.get(index);
}
}
Выход. Результат будет отличаться при каждом выполнении программы.
Index :2
30
Index :4
50
Index :4
50
Index :3
40
Index :4
50
Index :0
10
Index :2
30
Index :1
20
Index :2
30
Index :4
50
2. Рамдом ()
Random пример, чтобы получить случайный элемент из ArrayList.
RandomExample.java
package com.mkyong;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RandomExample {
private Random random = new Random();
public static void main(String[] args) {
List list = new ArrayList();
list.add("Apple");
list.add("Boy");
list.add("Cat");
list.add("Dog");
list.add("Elephant");
RandomExample obj = new RandomExample();
for(int i = 0; i < 10; i++){
System.out.println(obj.getRandomList(list));
}
}
public String getRandomList(List list) {
// 0-4
int index = random.nextInt(list.size());
System.out.println("nIndex :" + index );
return list.get(index);
}
}
Выход
Index :3
Dog
Index :1
Boy
Index :2
Cat
Index :2
Cat
Index :4
Elephant
Index :1
Boy
Index :2
Cat
Index :0
Apple
Index :0
Apple
Index :3
Dog
3. Math.random ()
Math.random() пример, чтобы получить случайный элемент из ArrayList.
MathRandomExample.java
package com.mkyong;
import java.util.ArrayList;
import java.util.List;
public class MathRandomExample {
public static void main(String[] args) {
List list = new ArrayList();
list.add(10);
list.add(20);
list.add(30);
list.add(40);
list.add(50);
MathRandomExample obj = new MathRandomExample();
for(int i = 0; i < 10; i++){
System.out.println(obj.getRandomList(list));
}
}
public int getRandomList(List list) {
//Math.random () = больше или равно 0,0 и меньше 1
// 0-4
int index = (int)(Math.random()*list.size());
System.out.println("nIndex :" + index );
return list.get(index);
}
}








