Java – 从列表中随机获取元素

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

这样,能得到完全随机的一组数据。

转载请注明出处:码谱记录 » Java – 从列表中随机获取元素
标签: