从 Java 的 List 中获取一个元素,需要用到 get()
方法,该方法需要一个索引值作为入参。
要想随机获取元素值,我们需要生成随机的索引值。
获取一个随机元素
下面给出了一个包含重复数据的 list:
List<String> list = Arrays.asList("A", "B", "C", "D", "E", "F", "E", "D", "E");
获取一个随机元素,即得到 A 或 F 等。
public static void randomLetter(List<String> list){
Random random = new Random();
String letter = list.get(random.nextInt(list.size()));
}
使用 Random 类实例编写多线程应用程序时,可能会导致为访问此实例的每个线程选择相同的值。我们可以使用专用的 ThreadLocalRandom 类为每个线程创建一个新实例:
public static void randomLetter2(List<String> list){
int index = ThreadLocalRandom.current().nextInt(list.size());
String letter = list.get(index);
}
获取多个随机元素
可以通过循环的方式,获取多个随机元素。
public static void randomLetters(List<String> list){
List<String> results = new ArrayList<>();
Random random = new Random();
// 获取 3 个随机元素
int count = 3;
for(int i =0; i< count;i++){
String letter = list.get(random.nextInt(list.size()));
results.add(letter);
}
System.out.println(results);
}
[A, D, E]
还有一个办法,我们可以从原来的 List 中随机截取一段数据:
public static void randomLettersSub(List<String> list){
Random random = new Random();
// 获取 3 个随机元素
int count = 3;
int end = random.nextInt(list.size() - count) + count;
List<String> results = list.subList(end - count, end);
}
这样得到的数据,随机性不高,我们还可以用 shuffle()
方法来打乱原始的 List:
public static void randomLettersSf(List<String> list){
Collections.shuffle(list);
// 获取 3 个随机元素
int count = 3;
List<String> results = list.subList(0, count);
System.out.println(results);
}
这样,能得到完全随机的一组数据。