我需要这个来洗牌一个字符数组
您可以像这样为原语调整洗牌代码
public static void shuffle(char[] chars, Random rnd) {
int size = chars.length;
for (int i = size; i > 1; i--) {
int idx = rnd.nextInt(i);
char tmp = chars[idx];
chars[idx] = chars[i-1];
chars[i-1] = tmp;
}
}
你可以做
Collections.shuffle(Arrays.asList(array), random);
或者你可以看看这段代码。使用一个临时变量并在进行时减小随机变量的大小会稍微更有效。请参阅 Collections.shuffle 了解如何执行此操作。
public static void shuffle(List<?> list, Random rnd) {
int size = list.size();
if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
for (int i=size; i>1; i--)
swap(list, i-1, rnd.nextInt(i));
} else {
public static void swap(List<?> list, int i, int j) {
final List l = list;
l.set(i, l.set(j, l.get(i)));
}
注意:你正在做(lastIndex+1)
,但 lastIndexarr.length - 1
真的是这样arr.length