2 回答
TA贡献1809条经验 获得超8个赞
这个想法是在集合中有N个元素,你会从中选择数字,直到它被耗尽。类似的东西
List<Integer> temp = IntStream.range(0, 6).boxed().collect(Collectors.toList());
int[] array = new int[6];
while (temp.size() > 0) {
int rndIndex = ThreadLocalRandom.current().nextInt(temp.size());
array[temp.size() - 1] = temp.get(rndIndex);
temp.remove(rndIndex);
}
System.out.println(Arrays.toString(array)); // could be [4, 5, 3, 2, 1, 0]
如果您不想使用临时列表,则可以这样做,但这需要更多的代码。这个想法是一样的。
TA贡献1884条经验 获得超4个赞
使用排序地图怎么样,你的键将是随机的,就像这样:
public static int[] derangement(int n){
Random rand = new Random();
int[] result = new int[n];
SortedMap<Double, Integer> map = new TreeMap<>();
for (int i = 0; i < n; i++) {
map.put(rand.nextDouble(), i);
}
int i = 0;
for (Double key: map.keySet()) {
result[i] = map.get(key);
i++;
}
return result;
}
这样,当地图中的随机键变为有序时,您将对列表进行随机排序。
添加回答
举报