Обычно мы используем следующие способы генерации случайного числа в 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) { Listlist = 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) { Listlist = 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) { Listlist = 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/”