Java数组随机排序:5种高效洗牌算法详解与实例

在Java中,有两种方法可以对数组进行洗牌操作。

  1. 使用Collections.shuffle()方法
  2. 使用Random类

使用Collections类对数组元素进行洗牌操作

我们可以从数组中创建一个列表,然后使用Collections类的shuffle()方法来随机排序其元素。然后将列表转换回原始数组。

package com.Olivia.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));
    }
}

输出:[1, 7, 5, 2, 3, 6, 4]

请注意,Arrays.asList()仅适用于对象数组。泛型无法使用自动装箱的概念。因此,您不能使用这种方式对原始数组进行洗牌。

使用Random类对数组进行洗牌

我们可以用一个for循环遍历数组元素。然后,我们使用Random类来生成一个随机索引号。然后将当前索引元素与随机生成的索引元素进行交换。在for循环结束时,我们将得到一个随机打乱的数组。

package com.Olivia.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));
    }
}

输出示例:[2, 4, 5, 1, 7, 3, 6]

bannerAds