如何在Java中对数组进行洗牌
在Java中,有两种方法可以对数组进行洗牌操作。
-
- 随机打乱集合 (Collections.shuffle() 方法)
- 随机类 (Random Class)
使用Collection类对数组元素进行洗牌操作。
我们可以从数组中创建一个列表,然后使用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] 的一个选项是: [2, 4, 5, 1, 7, 3, 6]