二维ArrayList

use*_*804 19 java

我知道我可以通过在它旁边添加另一个[]来为数组添加维度.但是我可以在java.util.ArrayList中拥有多个Dimension吗?我怎么能做到这一点?

pau*_*ore 25

List<ArrayList<Integer>> twoDArrayList = new ArrayList<ArrayList<Integer>>();
Run Code Online (Sandbox Code Playgroud)

@ rgettman的答案完成了工作,但有一些需要注意的注意事项:

警告1:尺寸

在最常见的用例中,数组的维度是预定义的,例如:

int[][] array = new int[5][6];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,数组将是定义的维度的"矩形"形式:

  0 1 2 3 4 5
0 [][][][][][]
1 [][][][][][]
2 [][][][][][]
3 [][][][][][]
4 [][][][][][]  
Run Code Online (Sandbox Code Playgroud)

正如下面评论中的另一位成员所建议的那样,还有更多内容."二维数组"仅仅是其他数组的数组,上面的代码行是简写的:

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];
Run Code Online (Sandbox Code Playgroud)

或者,子数组可以用不同的大小进行实例化,在这种情况下,"数据形状"将不再是矩形:

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 [][][]
Run Code Online (Sandbox Code Playgroud)

使用该ArrayList<ArrayList<Integer>>方法将产生"列表列表",其中所涉及的所有列表的长度将由于执行的操作而增长.

没有预先定义尺寸的简写.必须将子列表插入主列表中,然后必须将数据元素插入子列表中.因此,数据的形状类似于第二个示例:

0 [][]        <- list with 2 elements
1 [][][][]    <- list with 4 elements
2 []          ...and so on
3 [][][][][][]
4 [][][]
Run Code Online (Sandbox Code Playgroud)

警告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
Run Code Online (Sandbox Code Playgroud)

列表(与所有其他集合一样)仅允许使用盒装类型.因此,虽然可以预先定义列表的长度,但其元素的默认值将始终为null.

List<Integer> = new ArrayList<Integer>(10); // all elements will default to null
Run Code Online (Sandbox Code Playgroud)

  • @paulkore,为了记录,应该注意二维数组(如果一次创建一行)可以是非矩形的"参差不齐"数组,非常类似于列表示例. (4认同)

rge*_*man 24

是的,这是可能的.只要有你的元素ArrayList也可以ArrayLists.

ArrayList<ArrayList<Integer>> twoDArrayList = new ArrayList<ArrayList<Integer>>();
Run Code Online (Sandbox Code Playgroud)

这不仅适用于ArrayLists其他集合类型,也适用于其他集合类型.