当我学习二维数组时,我被告知它们是数组的数组,类似于数组列表的数组。但我一直在思考这个问题,它实际上非常令人困惑:
ArrayList[] arrOfList = new ArrayList[5];
arrOfList[0] = new ArrayList<Integer>();
arrOfList[0].add(1);
arrOfList[0].add(2);
arrOfList[0].add(3);
//arrOfList[0] is the first list, with 3 elements
//arrOfList is an array of 5 lists; arrOfList.length = 5
int[][] arrOfArr = new int[3][5];
//arrOfArr[0] is NOT an array with 3 elements
//arrOfArr is NOT an array of 5 arrays; arrOfArr.length = 3
我想,如果我把我认为相关(但不相关)的部分加粗,我的意思会更清楚:
数组列表[] arrOfList =新的数组列表[5];
整数[][] arrOfArr =新的整数[3][5];
既然将2d数组与任意类型相关联是不正确的,那么关于声明2d数组,还有什么更直观的方法呢?(如上所述)
3条答案
按热度按时间ssgvzors1#
这可能会帮助你更形象化。
当使用方括号
[]
时,第一对总是行,第二对总是列。在这两种情况下,第一维(行)保存相应Array /ArrayList的内存地址。第二维(列)保存存储在Array/ArrayList的特定行中的相应值。
你所学到的是正确的。数组的数组类似于数组列表的数组,只是数组列表的长度是可变的。这意味着,对于数组列表的数组,宽度(列数)不是静态的。
这就是说,创建一个长度为5**(5行)的**Array,* 数据类型为ArrayList(可变长度,因此可以是任意数量的列)*。
也就是说,创建一个长度为3(3行)的**Array , 数据类型为长度为5(5列)的Array *。
ArrayList具有可变长度这一事实可能会引起混淆,但我仍然坚持相同的答案:第一对[] =行;第二对[] =列。
ruarlubt2#
int[][] arrOfArr = new int[3][5]
这将创建一个空的 * 网格 *,其中包含3行和5列的数组单元格。
然后,要填充这些列,只需执行
arrOfArr[0][2] = 4
,它向下到row 0
,然后跨到column 2
。或者,将其视为一组3个批次的5个单元阵列
oalqel3c3#
整数[][] arrOfArr =新整数[3][5];
//arrOfArr[3]是行数
//arrOfArr[5]是列数