Java中的Collections.shuffle()方法及示例

Java中的Collections.shuffle()方法及示例

Collections类的shuffle()方法,正如类名所示,位于utility包中,该方法可以将列表中的元素进行随机排序。

我们可以使用以下两种方式在程序中实现:

  1. 使用预定义的随机源
  2. 使用用户提供的随机源

方案1: 使用预定义的随机源对给定列表进行随机排序。

语法:

public static void shuffle(List mylist)

抛出的异常: 如果给定的列表或其列表迭代器不支持设置操作,则抛出UnsupportedOperationException异常。

示例:

// Java程序演示
// Collections类的shuffle()方法
  
// 导入工具类
import java.util.*;
  
// 主类
public class GFG {
    
    // 主驱动程序
    public static void main(String[] args)
    {
        // 创建一个空的字符串类型ArrayList
        ArrayList<String> mylist = new ArrayList<String>();
  
        // 将自定义输入元素添加到列表对象中
        mylist.add("code");
        mylist.add("quiz");
        mylist.add("geeksforgeeks");
        mylist.add("quiz");
        mylist.add("practice");
        mylist.add("qa");
  
        // 打印洗牌前的列表
        System.out.println("Original List : \n" + mylist);
  
        // 洗牌列表
        Collections.shuffle(mylist);
  
        // 打印洗牌后的列表
        System.out.println("\nShuffled List : \n" + mylist);
    }
}

输出

Original List : 


Shuffled List : 
[quiz, quiz, geeksforgeeks, code, practice, qa]

方案2: 使用用户提供的随机源对给定列表进行随机排序。

此处提供了一个额外的参数,即上述的“rndm”是用于随机排序列表的随机源。

语法:

public static void shuffle(List mylist, Random rndm)

参数: 它以两个参数列出,如下:

  • mylist
  • rndm

异常: 如果指定的列表或其列表迭代器不支持设置操作,则抛出UnsupportedOperationException异常。

示例:

// 演示shuffle()的Java程序,使用用户提供的随机源

// 导入所需的实用程序类
import java.util.*;

// 主类
public class GFG {

    // 主驱动程序方法
    public static void main(String[] args) {

        // 创建一个空的字符串类型的ArrayList
        ArrayList<String> mylist = new ArrayList<String>();

        // 向上述创建的对象添加自定义输入元素
        mylist.add("code");
        mylist.add("quiz");
        mylist.add("geeksforgeeks");
        mylist.add("quiz");
        mylist.add("practice");
        mylist.add("qa");

        // 在控制台上打印并显示List的元素
        System.out.println("原始列表:\n" + mylist);

        // 使用Random()方法对给定的列表进行洗牌
        Collections.shuffle(mylist, new Random());

        // 在控制台上打印更新后的列表
        System.out.println("\n使用Random()洗牌后的列表:\n" + mylist);

        // 使用Random(3)洗牌列表
        Collections.shuffle(mylist, new Random(3));

        // 在控制台上打印更新后的列表
        System.out.println("\n使用Random(3)洗牌后的列表:\n" + mylist);

        // 再次使用Random(5)洗牌列表
        Collections.shuffle(mylist, new Random(5));

        System.out.println("\n使用Random(5)洗牌后的列表:\n" + mylist);
    }
}

输出

原始列表:


使用Random()洗牌后的列表:
[geeksforgeeks, qa, quiz, code, quiz, practice]

使用Random(3)洗牌后的列表:
[practice, code, qa, quiz, geeksforgeeks, quiz]

使用Random(5)洗牌后的列表:

但在实现这个方法之前,请记住下面列出的某些重要点 如下所列如下所示

  • 内部工作原理: 该方法在列表中随机排列元素。
  • 运行时间: 它在线性时间内运行。
  • 访问元素:
    • 它向后遍历列表,从最后一个元素到第二个元素,重复地将随机选择的元素交换到其“当前位置”。
    • 然后从列表的第一个元素到当前位置(包括当前位置)随机选择元素。

注意: 如果提供的列表没有实现RandomAccess接口,例如LinkedList,并且很大,它首先将列表复制到数组中,然后洗牌数组副本,最后将数组复制回列表中。这样可以确保时间保持线性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程