Collections.shuffle() Method in Java with Examples – GeeksforGeeks

shuffle() method of Collections class as the class name suggests is present in utility package known as java.util that shuffles the elements in the list.

There are two ways with which we can use to implement in our programs that are as follows:

  1. Using the pre-defined source of randomness
  2. Using the user-provided source of randomness

Way 1: Shuffling a given list using the pre-defined source of randomness.

Syntax:

public static void shuffle(List mylist)

Exception Thrown: UnsupportedOperationException is thrown if the given list or its list-iterator does not support the set operation.

Example:

Tóm Tắt

Java




 

import java.util.*;

 

public class GFG {

   

    

    public static void main(String[] args)

    {

        

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

    }

}



Output

Original List : 


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

Way 2:  Shuffling a given list using the user-provided source of randomness. 

Here an additional parameter that is provided which above specified “rndm” is the source of randomness to shuffle the list.
 

Syntax:

public static void shuffle(List mylist, Random rndm)

Parameters: Here it takes two parameters as listed 

  • List
  • Source of randomness  

Exceptions:  UnsupportedOperationException if the specified list or its list-iterator does not support the set operation.

Example:

Java




 

import java.util.*;

 

public class GFG {

 

    

    public static void main(String[] args)

    {

 

        

        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, new Random());

 

        

        System.out.println(

            "\nShuffled List with Random() : \n" + mylist);

 

        

        Collections.shuffle(mylist, new Random(3));

 

        

        System.out.println(

            "\nShuffled List with Random(3) : \n" + mylist);

 

        

        Collections.shuffle(mylist, new Random(5));

 

        System.out.println(

            "\nShuffled List with Random(5) : \n" + mylist);

    }

}



Output

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) : 

 

java-collection-framework-fundamentals-self-paced

But do remember certain important points as listed below prior to implementing this method as listed below as follows:

  • Internal working: This method randomly permutes elements randomly in a list.
  • Runtime: It runs in a linear time.
  • Access to elements:
    • It traverses the list backwards, from the last element up to the second, repeatedly swapping a randomly selected element to its “current position”.
    • Thereafter elements are randomly selected from the portion of the list that runs from the first element to the current position, inclusive.

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.

 

This article is contributed by Mohit Gupta. If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to [email protected]. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

My Personal Notes

arrow_drop_up