當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。