当前位置: 首页 > 面试题库 >

为什么Collections.shuffle()对于我的数组失败?

鲁景山
2023-03-14
问题内容

为什么我的代码不起作用?

package generatingInitialPopulation;

import java.util.Arrays;
import java.util.Collections;

public class TestShuffle {
    public static void main(String[] args) {
        int[] arr = new int[10];

        for (int i = 0; i < arr.length; i++) {
            arr[i] = i;
        }

        Collections.shuffle(Arrays.asList(arr));

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

结果是:0 1 2 3 4 5 6 7 8 9。

我期待一个 随机改组的序列


问题答案:

Arrays.asList()不能按预期应用于原始类型的数组。当应用于时int[],将Arrays.asList()产生的列表,int[]而不是的列表Integer。因此,您将重新整理一个新创建的列表int[]

这是Java中可变参数和泛型的微妙行为。Arrays.asList()声明

public static <T> List<T> asList(T... a)

因此,它可以采用某些类型的多个参数T并生成包含这些参数的列表,也可以采用一个类型的参数T[]并返回此数组支持的列表(可变参数的工作方式)。

但是,后一种选项仅在T为引用类型时才起作用(即,不是诸如的原始类型int),因为只有引用类型可以用作泛型T中的类型参数(并且是类型参数)。

因此,如果您通过int[],则会得到T=
int[],并且代码无法按预期工作。但是,如果您传递引用类型的数组(例如Integer[]),则会得到T= Integer并且一切正常:

Integer[] arr = new Integer[10];

for (int i = 0; i < arr.length; i++) { 
    arr[i] = i; 
}

Collections.shuffle(Arrays.asList(arr));

for (int i = 0; i < arr.length; i++) { 
    System.out.print(arr[i] + " "); 
}


 类似资料:
  • 问题内容: 最近,我发现自己需要确保清单不正确。Hibernate非常好,可以完美地返回它。愚蠢的冬眠,没有读懂我的想法。 我看了看我的Java API,它告诉我它的shuffle方法是这样做的: 使用默认的随机性源随机排列指定的列表。 作为我的好奇乔治,我想知道这到底意味着什么。我可以选一门数学课程来学习吗?我可以看到代码吗?Java,您对我的ArrayList做什么?!?!? 更具体地说,这里

  • 问题内容: 我有一个类Hra1,它定义了游戏规则(game = hra)。问题是,尽管在构造函数中创建了poleMinci数组,但我得到的是空值,例如poleMinci == null。换句话说,玩家的move方法始终返回false。 构造函数: 球员的移动方法: 问题答案: 您正在阴影变量: 在该构造函数中,由于poleMinci是在构造函数内部声明的,因此仅在构造函数内部可见。如果您在类中具有

  • 阿波罗查询是这样定义的: 我的架构: 我如何提出请求: UserLevelInput、RanksInput 和 PvpInput: 如果我在localhost:5005/graphql上进行这种变异,它将按预期工作: 此外,如果我提出请求(代码不在 /graphql),然后检查出Apollo开发工具的特定突变,我得到的Int,UserLevelIn的,RanksIn的和PpvIn的类型是未知的。A

  • 我试图解决Dijkstra算法上的一个hackerrank问题--https://www.hackerrank.com/challenges/dijkstrashortreach。我在使用我自己的Dijkstra代码逻辑。虽然我的代码解决了更容易的测试用例,但它在更高的测试用例上失败了。我猜我的代码在某个地方缺少了一些传递性,并且我得到的某个节点的值高于预期。你能帮我找出我的错误吗?问题:输入格式

  • 问题内容: 第二个表达式是类型擦除的结果吗? 我将如何定义Foo,以便可以使用Int参数化它,但仍然能够对其实例变量执行一些排序行为? 问题答案: 使用视图绑定。

  • 我有一个spring data jpa应用程序,它使用H2进行存储。当我尝试将一些数据解析到表中时,我得到一个错误: 我有一个表定义为: 我的@Entity类为: 这是令人反感的记录,它显然小到足以容纳该列: 我所能想到的是分号或其他一些无效字符正在引发此异常。 有人能看到这里的问题,并提出处理它的替代方案吗?