Método Collections.shuffle() en Java con ejemplos

El método shuffle() de la clase Collections, como sugiere el nombre de la clase, está presente en el paquete de utilidad conocido como java.util que mezcla los elementos de la lista.

Existen dos formas con las que podemos utilizar para implementar en nuestros programas que son las siguientes:

  1. Usando la fuente predefinida de aleatoriedad
  2. Uso de la fuente de aleatoriedad proporcionada por el usuario

Forma 1: barajar una lista determinada utilizando la fuente de aleatoriedad predefinida.

Sintaxis:

public static void shuffle(List mylist)

Excepción lanzada: UnsupportedOperationException se lanza si la lista dada o su iterador de lista no admite la operación de configuración.

Ejemplo:

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);
    }
}
Producción

Original List : 


Shuffled List : 

Forma 2:  barajar una lista determinada utilizando la fuente de aleatoriedad proporcionada por el usuario. 

Aquí se proporciona un parámetro adicional que se especifica anteriormente » rndm» es la fuente de aleatoriedad para barajar la lista.
 

Sintaxis:

public static void shuffle(List mylist, Random rndm)

Parámetros: Aquí toma dos parámetros como se enumeran 

  • Lista
  • Fuente de aleatoriedad  

Excepciones:   UnsupportedOperationException si la lista especificada o su iterador de lista no admite la operación de configuración.

Ejemplo:

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);
    }
}
Producción

Original List : 


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

Shuffled List with Random(3) : 


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

java-collection-framework-fundamentals-self-paced

Pero recuerde ciertos puntos importantes que se enumeran a continuación antes de implementar este método como se indica a continuación :

  • Trabajo interno: este método permuta aleatoriamente los elementos de una lista.
  • Runtime: Se ejecuta en un tiempo lineal.
  • Acceso a elementos:
    • Recorre la lista hacia atrás, desde el último elemento hasta el segundo, cambiando repetidamente un elemento seleccionado aleatoriamente a su «posición actual».
    • Posteriormente, los elementos se seleccionan aleatoriamente de la parte de la lista que va desde el primer elemento hasta la posición actual, inclusive.

Nota: si la lista proporcionada no implementa la interfaz RandomAccess, como LinkedList, y es grande, primero copia la lista en una array, luego mezcla la copia de la array y finalmente copia la array nuevamente en la lista. Esto asegura que el tiempo permanezca lineal.

Este artículo es una contribución de Mohit Gupta . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo y enviarlo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *