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

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

java-random-number

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

        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.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) {

        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.example;

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);

    }

}