在Java中,乱序数组可以通过多种方法实现,下面是一些常见的方法:
1. 使用`Collections.shuffle`方法:
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class ShuffleArray {
public static void main(String[] args) {
Integer[] arr = {1, 2, 3, 4, 5};
List
list = Arrays.asList(arr); Collections.shuffle(list);
arr = list.toArray(new Integer);
System.out.println(Arrays.toString(arr));
}
}
2. 使用Fisher-Yates洗牌算法(也称为Knuth洗牌算法):
import java.util.Random;
public class FisherYatesShuffle {
private static final Random random = new Random();
public static void main(String[] args) {
int[] arr = new int;
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
shuffle(arr);
System.out.println(Arrays.toString(arr));
}
private static void shuffle(int[] array) {
for (int i = array.length - 1; i > 0; i--) {
int j = random.nextInt(i + 1);
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
3. 使用自定义比较器进行排序,其中使用HashMap来存储每个元素的随机序列号:
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CustomSort {
public static void main(String[] args) {
List
list = Arrays.asList(1, 2, 3, 4, 5); Collections.sort(list, new Comparator
() { private Map
map = new HashMap<>(); @Override
public int compare(Integer v1, Integer v2) {
if (!map.containsKey(v1)) {
map.put(v1, Math.random());
}
if (!map.containsKey(v2)) {
map.put(v2, Math.random());
}
return Double.compare(map.get(v1), map.get(v2));
}
});
System.out.println(list);
}
}
以上方法都可以实现数组的乱序,你可以根据具体需求选择合适的方法。