当前位置: 首页 > 知识库问答 >
问题:

基元数组的Java toArray()转换

司空镜
2023-03-14

我很难理解为什么一维数组到基元数组的转换失败,而二维情况下却有效。

public static void main( String[] args ) throws IOException {
    List<Integer> oneD = List.of(1,2,3);
    int[] one = oneD.toArray(int[]::new); // error

    List<int[]> twoD = List.of(
            new int[]{1,2},
            new int[]{3,4}
            );

    int[][] two = twoD.toArray(int[][]::new); // works
}

我试着翻阅文件,但没有用。我可以看到的一件事是,在第一种情况下,由于我们试图将integer转换为int,所以可能导致错误,而第二种情况可以正常工作,因为int[]将是一个对象类型。

用一个示例来解释toArray的工作原理,特别是对基元的工作原理,将非常有帮助。

共有1个答案

侯兴为
2023-03-14

是的,integerint完全不同。int[]不是对象[]

还有,二维数组?你错了;这些都不存在。int[][]不是int的二维数组。它是int数组的一维数组。有一些简单的语法糖可以让您编写int[][]x=new int[5][10];,这是用于:

int[][] x = new int[5][];
for (int i = 0; i < x.length; i++) x[i] = new int[10];

这很好,也很方便,但在引擎盖下,它不是一个2D阵列;这些都不存在。x.getClass()的“组件类型”是int[].class-然后数组可以“脱节”(您可以让第0行包含5个单元格,而第1行包含10个单元格,即您可以编写x[1]=新的int[20];“这样就可以很好地工作。

这就解释了twod示例为什么可以工作。

若要将列表 转换为int[],请编写for循环。

List<Integer> list = ...;
int[] arr = new int[list.size()];
for (int i = 0; i < list.size(); i++) arr[i] = list.get(i);
 类似资料:
  • 问题内容: 是否有一种优雅的方法将原语数组转换为相应容器对象的数组- 例如,将a 转换为a ?还是我坚持循环浏览并手动执行? 是的,循环并不完全困难。有点丑。 问题答案: Apache Commons Apache Commons / Lang 有一个ArrayUtils类,用于定义这些方法。 所有称为 从原始数组转换为包装器数组的方法 从包装对象数组到原始数组的所有转换 例: 番石榴 但是然后我

  • 问题内容: 我将 ArrayList 与包装器类 Short一起使用 。 添加一些值后,我想获取原始数组,但是似乎该函数没有办法,因为它需要带有包装器类的 Array 。 是否有另一种方法不使用for或类似的东西? 问题答案: Apache Commons / Lang 有一个ArrayUtils类,用于定义这些方法。 所有调用的方法都从原始数组转换为包装器数组。 从包装对象数组到原始数组的所有转

  • 问题内容: 注意: 这要求与通常的元组到数组的转换相反。 我必须将一个参数传递给(包装的c ++)函数作为嵌套元组。例如,以下作品 而以下 不 不幸的是,我想使用的参数是一个numpy数组。对于某些N,该阵列的尺寸始终为2xN,这可能会很大。 有没有简单的方法可以将其转换为元组?我知道我可以循环遍历,创建一个新的元组,但是如果numpy数组提供了一些不错的访问权限,我会更喜欢。 如果不可能如我所愿

  • 我对postgresql(9.4)和javascript有一些问题。我试图将jsonb[]数据类型转换为javascript中json值的数组/列表。为了简单起见,我的示例在数组中只包含一个元素(json)。 以下是我迄今为止尝试过的。 这是我要找的。 任何帮助将不胜感激。

  • 本文向大家介绍Swift使用map(_ :)转换数组的元素,包括了Swift使用map(_ :)转换数组的元素的使用技巧和注意事项,需要的朋友参考一下 示例 如Array符合SequenceType,我们可以使用map(_:)转化的阵列A到阵列B使用类型的封闭(A) throws -> B。 例如,我们可以使用它将Ints数组转换为s数组,String如下所示: map(_:)将遍历数组,将给定的

  • 问题内容: 如果我有带签名的元组,则无法将其强制转换为。编译器说: 错误:无法表示元组转换((String,Bool)’到’(String,Any)’ 但这应该可行,因为可以安全地使用它。如果执行类似的操作,几乎会引发相同的错误: 错误: 无法将类型’(Swift.String,Swift.Bool)’的值强制转换为’(protocol <>,protocol <>)) 那么,有什么变通办法,尤其