Обычно мы используем следующие способы генерации случайного числа в Java.
1. Тредлокалрандом (JDK 1.7)
//Generate number between 0-9 int index = ThreadLocalRandom.current().nextInt(10);
2. Случайный()
//Generate number between 0-9 Random random = new Random(); int index = random.nextInt(10);
3. Математика.случайный()
//Generate number between 0-9 int index = (int)(Math.random()*10);
1. Для одного потока разница в производительности невелика, просто выберите все, что хотите.
2. Для нескольких потоков рекомендуется использовать Тредлокалрандом . Random является потокобезопасным, но если несколько потоков используют один и тот же экземпляр Random, это приводит к высокой конкуренции (несколько потоков продолжают получать доступ к одному и тому же методу генератора “случайных”) и снижает производительность. ThreadLocalRandom решает эту проблему, создавая случайный экземпляр для каждого потока.
Прочитайте это ThreadLocalRandom javadoc .
В этом уроке мы покажем вам, как использовать описанные выше методы для получения случайного элемента из списка.
1. ThreadLocalРандом
ThreadLocalRandom пример получения случайного элемента из списка массивов.
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. Случайный()
Случайный пример получения случайного элемента из списка массивов.
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() пример получения случайного элемента из списка массивов.
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() = greater than or equal to 0.0 and less than 1
//0-4
int index = (int)(Math.random()*list.size());
System.out.println("\nIndex :" + index );
return list.get(index);
}
}
Рекомендации
- Параллельный случайный в Java SE 7
- Reddit: Избегайте Случайного. Используйте новый ThreadLocalRandom из Java 7
- Использование ThreadLocalRandom для генерации случайных чисел идентификатор текущей должности загружается через JS автор комментарии
Оригинал: “https://mkyong.com/java/java-return-a-random-item-from-a-list/”