Java: вернуть случайный элемент из списка
Обычно мы используем следующие способы генерации случайного числа в Java.
1. ThreadLocalRandom (JDK 1.7)
//Generate number between 0-9 int index = ThreadLocalRandom.current().nextInt(10);
2. Random ()
//Generate number between 0-9 Random random = new Random(); int index = random.nextInt(10);
3. Math.random()
//Generate number between 0-9 int index = (int)(Math.random()*10);
Note
1. Для одного потока нет большой разницы в производительности, просто выберите все, что хотите.
2. Для нескольких потоков рекомендуется использоватьThreadLocalRandom
. Random является потокобезопасным, но если несколько потоков используют один и тот же экземпляр Random, это приводит к высокой конкуренции (несколько потоков для сохранения доступа к одному и тому же методу «случайного» генератора) и снижает производительность. ThreadLocalRandom решает эту проблему, создавая случайный экземпляр для каждого потока.
Прочтите этоThreadLocalRandom JavaDoc.
В этом руководстве мы покажем вам, как использовать вышеуказанные методы для получения случайного элемента из списка.
1. ThreadLocalRandom
ПримерThreadLocalRandom
для получения случайного элемента из ArrayList.
ThreadLocalRandomExample.java
package com.example; 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. Рамдом ()
ПримерRandom
для получения случайного элемента из ArrayList.
RandomExample.java
package com.example; 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()
ПримерMath.random()
для получения случайного элемента из ArrayList.
MathRandomExample.java
package com.example; 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); } }