我不确定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()])
在这种情况下做了什么?对不起,如果我的问题不清楚。
答案 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[]
的结果。因为传递数组,所以可以在方法中通过对传递的对象使用反射来创建新实例。