Домой java Java: вернуть случайный элемент из списка

Java: вернуть случайный элемент из списка

922
0

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

}

}

Рекомендации

  1. Случайный случай в Java SE 7
  2. Reddit: избегать случайных. Используйте новый ThreadLocalRandom из Java7
  3. Использование ThreadLocalRandom для генерации случайных чисел
  4. Ява случайный

    Java: вернуть случайный элемент из списка

    0.00 (0%) 0 votes

    ЧИТАТЬ ТАКЖЕ:  Заявление JDBC - вставить строку

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь