Table of Contents
URL: https://www.progressiverobot.com/shuffle-array-java/
There are two ways to shuffle an array in Java.
- Collections.shuffle() Method
- Random Class
1. Shuffle Array Elements using Collections Class
We can create a list from the array and then use the Collections class shuffle() method to shuffle its elements. Then convert the list to the original array.
package com.journaldev.examples;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class ShuffleArray {
public static void main(String[] args) {
Integer[] intArray = { 1, 2, 3, 4, 5, 6, 7 };
List<Integer> intList = Arrays.asList(intArray);
Collections.shuffle(intList);
intList.toArray(intArray);
System.out.println(Arrays.toString(intArray));
}
}
Output: [1, 7, 5, 2, 3, 6, 4] Note that the Arrays.asList() works with an array of objects only. The concept of [autoboxing](/community/tutorials/autoboxing-java) doesn't work with [generics](/community/tutorials/java-generics-example-method-class-interface). So you can't use this way to shuffle an array for primitives.
2. Shuffle Array using Random Class
We can iterate through the array elements in a [for loop](/community/tutorials/java-for-loop). Then, we use the [Random class](/community/tutorials/java-random) to generate a random index number. Then swap the current index element with the randomly generated index element. At the end of the for loop, we will have a randomly shuffled array.
package com.journaldev.examples;
import java.util.Arrays;
import java.util.Random;
public class ShuffleArray {
public static void main(String[] args) {
int[] array = { 1, 2, 3, 4, 5, 6, 7 };
Random rand = new Random();
for (int i = 0; i < array.length; i++) {
int randomIndexToSwap = rand.nextInt(array.length);
int temp = array[randomIndexToSwap];
array[randomIndexToSwap] = array[i];
array[i] = temp;
}
System.out.println(Arrays.toString(array));
}
}
Output: [2, 4, 5, 1, 7, 3, 6]