Home / Programmazione / Java / Recuperare un elemento random da una lista in Java
Mattepuffo

Recuperare un elemento random da una lista in Java

Recuperare un elemento random da una lista in Java

Oggi vediamo tre modi per recuperare un elemento random da una lista.

Useremo tre oggetti distinti:

Il primo è inoltre suggerito nel caso di utilizzo del multi-threading.

Partiremo sempre dallo stessa ArrayList.

Partiamo dall'ultimo che è più semplice:

public class Test {

    public static void main(String[] args) {
        ArrayList list = new ArrayList<>();
        list.add("Matteo");
        list.add("Simona");
        list.add("Alessio");
        Test t = new Test();
        for (int i = 0; i < 5; i++) {
            System.out.println("Item: " + t.getMathRandomList(list));
        }
    }

    public String getMathRandomList(ArrayList list) {
        int index = (int) (Math.random() * list.size());
        return list.get(index);
    }
}

Con Math.random reuperiamo un numero "a caso" scelto dalla lista.

public class Test {

    public static void main(String[] args) {
        ArrayList list = new ArrayList<>();
        list.add("Matteo");
        list.add("Simona");
        list.add("Alessio");
        Test t = new Test();
        for (int i = 0; i < 5; i++) {
            System.out.println("Item: " + t.getRandomList(list));
        }
    }

    public String getRandomList(ArrayList list) {
        Random random = new Random();
        int index = random.nextInt(list.size());
        return list.get(index);
    }
}

Qui usiamo Random e il metodo nextInt, passandogli la dimensione della lista.

Infine usiamo ThreadLocalRandom:

public class Test {

    public static void main(String[] args) {
        ArrayList list = new ArrayList<>();
        list.add("Matteo");
        list.add("Simona");
        list.add("Alessio");
        Test t = new Test();
        for (int i = 0; i < 5; i++) {
            System.out.println("Item: " + t.getThreadRandomList(list));
        }
    }

    public String getThreadRandomList(ArrayList list) {
        int index = ThreadLocalRandom.current().nextInt(list.size());
        return list.get(index);
    }
}

Come già detto, questo ultimo esempio è consigliato soprattutto nel caso di uso del multi-threading.

Questa classe ci permette di generare numeri in maniera isolata dal thread corrente.

Enjoy!