Java : Return a random item from a List
Normally, we are using the following ways to generate a random number in 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);
1. For single thread, there is not much performance difference, just pick whatever you want.
2. For multiple threads, it’s recommended to use ThreadLocalRandom. Random is thread safe, but if multiple threads use the same instance of Random, it leads high contention (multiple threads to keep accessing the same “random” generator method) and it kills performance. ThreadLocalRandom solve this by generating a Random instance per thread.
Read this ThreadLocalRandom JavaDoc.
In this tutorial, we will show you how to use above methods to get a random item from a List.
1. ThreadLocalRandom
ThreadLocalRandom example to get a random item from an ArrayList.
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<Integer> list = new ArrayList<Integer>(); 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<Integer> list) { //0-4 int index = ThreadLocalRandom.current().nextInt(list.size()); System.out.println("\nIndex :" + index ); return list.get(index);
Output. The result will be different each time program is executed.
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. Ramdom()
Random example to get a random item from an ArrayList.
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<String> list = new ArrayList<String>(); 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<String> list) { //0-4 int index = random.nextInt(list.size()); System.out.println("\nIndex :" + index ); return list.get(index);
Output
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() example to get a random item from an ArrayList.
package com.mkyong; import java.util.ArrayList; import java.util.List; public class MathRandomExample { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); 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<Integer> 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);
References
From:一号门
COMMENTS