我知道我可以通过在数组旁边添加另一个 [] 来向数组添加维度。但是我可以在 java.util.ArrayList 中有多个维度吗?我怎么能做到这一点?
3 回答
List<ArrayList<Integer>> twoDArrayList = new ArrayList<ArrayList<Integer>>();
@rgettman 的回答完成了工作,但是有一些注意事项需要注意:
警告 1:尺寸
在最常见的用例中,数组的维度是预定义的,例如:
int[][] array = new int[5][6];
在这种情况下,数组将是定义尺寸的“矩形”形式:
0 1 2 3 4 5
0 [][][][][][]
1 [][][][][][]
2 [][][][][][]
3 [][][][][][]
4 [][][][][][]
正如下面评论中的另一位成员所建议的那样,还有更多内容。“二维数组”只是其他数组的数组,上面的代码行是以下代码的简写:
int[][] array = new int[5][];
array[0] = new int[6];
array[1] = new int[6];
array[2] = new int[6];
array[3] = new int[6];
array[4] = new int[6];
或者,可以用不同的大小实例化子数组,在这种情况下,“数据形状”将不再是矩形:
int[][] array = new int[5][];
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1];
array[3] = new int[6];
array[4] = new int[3];
0 1 2 3 4 5
0 [][]
1 [][][][]
2 []
3 [][][][][][]
4 [][][]
使用该ArrayList<ArrayList<Integer>>
方法将产生一个“列表列表”,其中所涉及的所有列表的长度将由于所执行的操作而增长。
没有预先定义尺寸的简写。子列表必须插入到主列表中,然后数据元素必须插入到子列表中。因此,数据的形状类似于第二个示例:
0 [][] <- list with 2 elements
1 [][][][] <- list with 4 elements
2 [] ...and so on
3 [][][][][][]
4 [][][]
警告 2:数据的默认值
数组允许使用原始数据类型(例如“int”)以及它们的盒装对应物(例如“Integer”)。当涉及到元素的默认值时,它们的行为不同。
int[][] array1 = new int[5][6]; // all elements will default to 0
Integer[][] array2 = new Integer[5][6]; // all elements will default to null
列表(与所有其他集合一样)仅允许使用盒装类型。因此,虽然可以预先定义列表的长度,但其元素的默认值将始终为空。
List<Integer> = new ArrayList<Integer>(10); // all elements will default to null
是的,这是可能的。只要有你的元素ArrayList
也可以ArrayLists
。
ArrayList<ArrayList<Integer>> twoDArrayList = new ArrayList<ArrayList<Integer>>();
这不仅适用于ArrayLists
,还适用于其他集合类型。
是的你可以!在常规数组中,当您添加第二对大括号时,您将创建一个存储数组类型对象的普通数组。你可以在这里做同样的事情,让 ArrayList 保存 ArrayList 类型的东西:ArrayList<ArrayList<Object>> list = new ArrayList<ArrayList<Object>>();