toArray方法中的参数有什么作用?

时间:2018-05-24 17:18:02

标签: java arrays

我不确定toArray方法中的参数是什么以及它的功能是什么。假设我有以下代码:

Integer array [][] = new Integer[testing.size()][];

    for (int y = 0; y < testing.size(); y++)
    {
        ArrayList<Integer> testing2 = square.get(y);
        array[y] = testing2.toArray(new Integer [testing2.size()]);
    }       
}

Square是一个多维数组列表。为什么array[y]在声明为二维数组时看起来像一个单维数组。此外,此参数(new Integer [testing2.size()])在这种情况下做了什么?对不起,如果我的问题不清楚。

3 个答案:

答案 0 :(得分:2)

  

为什么当数组[y]被声明为二维数组时,它看起来像一个单维数组。

array[y]是一个单维数组。你的array是一个二维数组,当你提供一个索引时,它是一个1d数组,当你提供两个不同时,它只是一个标量值。

  

这个参数(new Integer [testing2.size()])在这种情况下做了什么?

它提供了一个足够大小(或至少是适当类型)的数组来填充。

如果你想知道方法的作用,我建议阅读Javadoc。

https://docs.oracle.com/javase/10/docs/api/java/util/List.html#toArray(T%5B%5D)

要传递的数组是;

  

要存储此列表元素的数组,如果它足够大;否则,为此目的分配一个相同运行时类型的新数组。

答案 1 :(得分:1)

Java中,2D数组是一个数组数组。因此,数组的每一行都可以有不同的大小。

Integer array [][] = new Integer[testing.size()][];

    for (int y = 0; y < testing.size(); y++) {
        // list of integers
        List<Integer> testing2 = square.get(y);
        // create an 1D array from the list
        Integer[] testingArray = testing2.toArray(new Integer [testing2.size()]);
        // add this 1D array to the row y of the based array (1D + 1D array == 2D array)
        array[y] = testingArray;
    }       
}

<强> P.S。

int[][] arr = new int[2][];  // create 2D array with 2 rows (colums not defined)
arr[0] = new int[3];         // row 0 is now an array with 3 elements (columns)
arr[1] = new int[5];         // row 1 is now an array with 5 elements (columns)

int a = int[1][4];  // row 1, column 4
int b = int[0][4];  // ArrayOutOfBoundException

int[] row = int[0]; // retrieve whole row 0 as 1D array with 3 elements (columns)

答案 2 :(得分:0)

如果传递正确或更大尺寸的数组,则可以填充并返回它。 否则,将创建,填充并返回新数组。

实际上,参数主要在那里,否则,方法toArray()无法知道它必须返回的数组类型是什么。 这是类型擦除和无法说new T[]的结果。因为传递数组,所以可以在方法中通过对传递的对象使用反射来创建新实例。