当我被教导二维数组时,我被教导这是一个数组数组,类似于数组列表的数组。但我在想,这真的很让人困惑:
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
如果我把我认为相关的部分加上粗体(但不要加粗体),我想我的意思会更清楚:
arraylist[]arroflist=新的arraylist[5];
int[][]arrofarr=新int[3][5];
我想我的问题是:既然将2d数组与任意类型相关联是不对的,那么什么是更直观的方法来考虑声明2d数组呢(如上所示)
3条答案
按热度按时间ttcibm8c1#
int[][]arrofarr=新int[3][5];
//arrofarr[3]是行数
//arrofarr[5]是列数
v09wglhw2#
int[][] arrOfArr = new int[3][5]
这将创建一个由3行5列的数组单元格组成的空网格。即然后填充这些列
arrOfArr[0][2] = 4
这可以归结为row 0
和对面的column 2
. 即或者,将其视为一组3批5个单元阵列
4dc9hkyq3#
这可能会帮助你更形象化。
使用方括号时
[]
,第一对总是行,第二对是列。在这两种情况下,第一个维度(行)保存相应数组/数组列表的内存地址。第二个维度(列)保存存储在array/arraylist的特定行中的相应值。
你所学到的是正确的。数组的数组类似于数组列表的数组,只是数组列表的长度是可变的。这意味着,对于ArrayList数组,宽度(列数)不是静态的。
这就是说,创建一个长度为5(5行)的数组,数据类型为arraylist(长度可变,因此可以是任意数量的列)。
也就是说,创建一个长度为3(3行)的数组,数据类型为长度为5(5列)的数组。
arraylist具有可变长度这一事实可能会引起混淆,但我仍然坚持相同的答案:第一对[]=行;第二对[]=列。