想了解更多数据结构以及算法题,可以关注微信公众号“数据结构和算法”,每天一题为你精彩解答。也可以扫描下面的二维码关注
如果打乱的是list,可以使用下面这个方法
Collections.shuffle(List<?> list);
如果使用的是数组,可以先把数组转为list,然后再调用上面的方法。这样虽然也能解决,但总感觉有点多此一举。可以直接写个方法来随机打乱数组,看下代码
public class Shuffle {
public static void main(String[] args) {
int[] arr = new int[10];
//初始化数组
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
System.out.println("数组打乱之前");
//打印数组打乱之前的值
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println("\n数组打乱之后");
shuffle(arr);//打乱数组
//打印数组打乱之后的值
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
//打乱数组
private static void shuffle(int[] arr) {
Random mRandom = new Random();
for (int i = arr.length; i > 0; i--) {
int rand = mRandom.nextInt(i);
swap(arr, rand, i - 1);
}
}
//交换两个值
private static void swap(int[] a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
看下打印结果,实际上这个数组打乱之后的输出每次都是不一样的。
> Task :javatest:Shuffle.main()
数组打乱之前
0 1 2 3 4 5 6 7 8 9
数组打乱之后
6 9 3 0 4 1 7 8 2 5