Randomly select items from a List in Java

In this article, we will show the most efficient way finding or picking a element from List.
The basic idea for pick an item from list is, First generate a number which should be between 0 to list size.

1. Single Random Item

First we select a random index for using Random.nextInt(int bound) method. Instead of Random class, you can always use static method Math.random()(random() method generate an number between 0 to 1) and multiply it with list size.

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program select a random element from array
  
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
  
public class GFG {
  
    // Drive Function
    public static void main(String[] args)
    {
  
        // create a list of Integer type
        List<Integer> list = new ArrayList<>();
        // add 5 element in ArrayList
        list.add(10);
        list.add(20);
        list.add(30);
        list.add(40);
        list.add(50);
  
        GFG obj = new GFG();
  
        // take a random element from list and print them
        System.out.println(obj.getRandomElement(list));
    }
  
    // Function select an element base on index 
    // and return an element
    public int getRandomElement(List<Integer> list)
    {
        Random rand = new Random();
        return list.get(rand.nextInt(list.size()));
    }
}

chevron_right


Output:

30

2. Select Random Index In Multithread Environment
When we work with multithread applications using the single Random class instance then might result in picking same value for every process accessing this instance. Hence, We can always create a new instance per thread by using ThreadLocalRandom class.

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program select a random element from List
  
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
  
public class GFG {
  
    // Drive Function
    public static void main(String[] args)
    {
  
        // create a list of Integer type
        List<Integer> list = new ArrayList<>();
  
        // add 5 element in ArrayList
        list.add(10);
        list.add(20);
        list.add(30);
        list.add(40);
        list.add(50);
  
        GFG obj = new GFG();
  
        // boundIndex for select in sub list
        int boundIndex = 3;
  
        // take a random element from list and print them
        System.out.println(obj.getRandomElement(list, boundIndex));
    }
  
    // Function select an element base on index and return an element
    public int getRandomElement(List<Integer> list, int bound)
    {
        // ThreadLocalRandom generate a int type number
        return list.get(ThreadLocalRandom.current()
                            .nextInt(list.size())
                        % bound);
    }
}

chevron_right


Output:

30

3. Select Random Items With Repetitions List Element
Sometimes we want to pick few elements from a list. so first know how much element we want to select after that we select items one by one and add a new list and return it. Note: in this case one element may be select many times because we are not remove selected elements so list size remaining same.

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program select a random element from List
  
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
  
public class GFG {
  
    // Drive Function
    public static void main(String[] args)
    {
  
        // create a list of Integer type
        List<Integer> list = new ArrayList<>();
  
        // add 5 element in ArrayList
        list.add(10);
        list.add(20);
        list.add(30);
        list.add(40);
        list.add(50);
  
        GFG obj = new GFG();
  
        // boundIndex for select in sub list
        int numberOfElements = 3;
  
        // take a random element from list and print them
        System.out.println(obj.getRandomElement(list, 
                                     numberOfElements));
    }
  
    // Function select an element base on index and return
    // an element
    public List<Integer> getRandomElement(List<Integer> list,
                                          int totalItems)
    {
        Random rand = new Random();
  
        // create a temporary list for storing
        // selected element
        List<Integer> newList = new ArrayList<>();
        for (int i = 0; i < totalItems; i++) {
  
            // take a raundom index between 0 to size
            // of given List
            int randomIndex = rand.nextInt(list.size());
  
            // add element in temporary list
            newList.add(list.get(randomIndex));
        }
        return newList;
    }
}

chevron_right


Output:

[10, 50, 20]

4. Select Random Items Without Repetitions List Element
Sometimes we want to pick few elements from a list. so first make sure how much element we want to select after that we select items one by one and add a new list and return it. Note: in this case one element select only ones because we are remove selected elements, so decrease list size also automatic by JVM.

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program select a random element from List
  
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
  
public class GFG {
  
    // Drive Function
    public static void main(String[] args)
    {
  
        // create a list of Integer type
        List<Integer> list = new ArrayList<>();
        // add 5 element in ArrayList
        list.add(10);
        list.add(20);
        list.add(30);
        list.add(40);
        list.add(50);
  
        GFG obj = new GFG();
  
        // boundIndex for select in sub list
        int numberOfElements = 3;
  
        // take a random element from list and print them
        System.out.println(obj.getRandomElement(list,
                                     numberOfElements));
    }
  
    // Function select an element base on index and return
    // an element
    public List<Integer> getRandomElement(List<Integer> list,
                                          int totalItems)
    {
        Random rand = new Random();
  
        // create a temporary list for storing
        // selected element
        List<Integer> newList = new ArrayList<>();
        for (int i = 0; i < totalItems; i++) {
  
            // take a raundom index between 0 to size 
            // of given List
            int randomIndex = rand.nextInt(list.size());
  
            // add element in temporary list
            newList.add(list.get(randomIndex));
  
            // Remove selected element from orginal list
            list.remove(randomIndex);
        }
        return newList;
    }
}

chevron_right


Output:

[50, 40, 30]


My Personal Notes arrow_drop_up

Strategy Path planning and Destination matters in success No need to worry about in between temporary failures

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.