URL: https://www.progressiverobot.com/shuffle-array-java/

There are two ways to shuffle an array in Java.

  1. Collections.shuffle() Method
  2. Random Class

1. Shuffle Array Elements using Collections Class

array illustration for: 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]