是否可以在Java中定义任意的,高度嵌套的数组?

时间:2016-05-11 01:39:03

标签: java arrays multidimensional-array

在JavaScript中,我们可以灵活地定义任意的,高度嵌套的数组。例如,以下内容。

var arr1 = [ [0, 1], [2, 3] ];
var arr2 = [ 
 [ [0, 1], [2, 3] ], 
 [ [4, 5], [6, 7] ] 
];

是否可以在Java中为类的字段定义类似的内容?该字段必须能够存储嵌套数组的任意维度/深度。

我正考虑使用列表列表。

List<List<Integer>> arr = new ArrayList<>();

然而,这在某种意义上只是一个2D矩阵。请注意,对于我的用例,索引很重要(它有意义)。

我想我也可以创建一个Tree结构,但这可能需要一些非常重要的工作才能使它正确。

public class Node {
 int index; //like the index of an array i want, unique amongst nodes of same level sharing a common parent
 List<Integer> values; //the actual elements, if any
 List<Node> children; //nesting deeper
}

任何提示都表示赞赏。

2 个答案:

答案 0 :(得分:1)

Java是一种强类型语言,您可以在声明时定义数组的维度。像,

int[][] arr1 = { { 0, 1 }, { 2, 3 } };
int[][][] arr2 = { { { 0, 1 }, { 2, 3 } }, { { 4, 5 }, { 6, 7 } } };
System.out.println(Arrays.deepToString(arr2));

但是,也可以使Object引用任何数组(因为数组是Object个实例)。在上面的示例中,请注意签名为Arrays.deepToString(Object[])

答案 1 :(得分:1)

1)你可以做这样的事情(如果它对你有用):

List<List<List<List<Integer>> arr = new ArrayList<>();

2)同样作为Javascript,Java可以有多维数组

Integer[][] arr = {{1,2},{2,3}};

3)要在运行时创建数组,可以使用反射:

Integer[] array = (Integer[])Array.newInstance(Integer.class, d1);
Integer[][] array = (Integer[][])Array.newInstance(Integer.class, d1, d2);
Integer[][][] array = (Integer[][][])Array.newInstance(Integer.class, d1, d2, d3);

newInstance

4)您还可以使用实现多维数组的库。像:

Vectorz

我认为最后一个选项是你最好的选择。