当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Collections.shuffle()用法及代码示例


正如类名所示,Collections 类的 shuffle() 方法存在于称为java.util打乱列表中的元素。

我们可以使用两种方法在我们的程序中实现,如下所示:

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

方式 1:使用预定义的随机源对给定列表进行混洗。

用法:

public static void shuffle(List mylist)

抛出异常: UnsupportedOperationException如果给定列表或其list-iterator不支持设置操作,则抛出该异常。

例子:

Java


// Java program to demonstrate  
// working of shuffle() method 
// of Collections class 
  
// Importing utility classes 
import java.util.*; 
  
// Main class 
public class GFG { 
    
    // Main driver method 
    public static void main(String[] args) 
    { 
        // Creating an empty ArrayList of string type 
        ArrayList<String> mylist = new ArrayList<String>(); 
  
        // Adding custom input elements to list object 
        mylist.add("code"); 
        mylist.add("quiz"); 
        mylist.add("geeksforgeeks"); 
        mylist.add("quiz"); 
        mylist.add("practice"); 
        mylist.add("qa"); 
  
        // Printing list before shuffling 
        System.out.println("Original List : \n" + mylist); 
  
        // Shuffling the list 
        Collections.shuffle(mylist); 
  
        // Printing list after shuffling 
        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)

Parameters: 这里需要列出两个参数

  • List
  • 随机性的来源

例外情况:UnsupportedOperationException如果指定的列表或其list-iterator不支持设置操作。

例子:

Java


// Java Program to demonstrate working of shuffle() 
// with user provided source of randomness 
  
// Importing required utility classes 
import java.util.*; 
  
// Main class 
public class GFG { 
  
    // Main driver method 
    public static void main(String[] args) 
    { 
  
        // Creating an empty ArrayList of string type 
        ArrayList<String> mylist = new ArrayList<String>(); 
  
        // Adding custom input elements to above created 
        // object 
        mylist.add("code"); 
        mylist.add("quiz"); 
        mylist.add("geeksforgeeks"); 
        mylist.add("quiz"); 
        mylist.add("practice"); 
        mylist.add("qa"); 
  
        // Print and display the elements of List on console 
        System.out.println("Original List : \n" + mylist); 
  
        // Shuffling the given list 
        // using Random() method 
        Collections.shuffle(mylist, new Random()); 
  
        // Print the updated list on console 
        System.out.println( 
            "\nShuffled List with Random() : \n" + mylist); 
  
        // Shuffling list by using Random(3) 
        Collections.shuffle(mylist, new Random(3)); 
  
        // Print the updated list on console 
        System.out.println( 
            "\nShuffled List with Random(3) : \n" + mylist); 
  
        // Again shuffling list by using Random(3) 
        Collections.shuffle(mylist, new Random(5)); 
  
        System.out.println( 
            "\nShuffled List with Random(5) : \n" + mylist); 
    } 
}
输出
Original List : 


Shuffled List with Random() : 
[geeksforgeeks, qa, quiz, code, quiz, practice]

Shuffled List with Random(3) : 
[practice, code, qa, quiz, geeksforgeeks, quiz]

Shuffled List with Random(5) : 

但在实施此方法之前,请记住以下列出的某些重要事项,如下所示:

  • 内部工作:此方法随机排列列表中的元素。
  • Runtime:它以线性时间运行。
  • 访问元素:
    • 它向后遍历列表,从最后一个元素到第二个元素,反复将随机选择的元素交换为其“current position”。
    • 此后,从列表中从第一个元素到当前位置(含)的部分中随机选择元素。

Note: If the provided list does not implement the RandomAccess interface, like LinkedList, and is large, it first copies the list into an array, then shuffles the array copy, and finally copies the array back into the list. This makes sure that the time remains linear.



相关用法


注:本文由纯净天空筛选整理自佚名大神的英文原创作品 Collections.shuffle() Method in Java with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。