java 二维数组是如何构造的?

polkgigr  于 2023-02-18  发布在  Java
关注(0)|答案(3)|浏览(125)

当我学习二维数组时,我被告知它们是数组的数组,类似于数组列表的数组。但我一直在思考这个问题,它实际上非常令人困惑:

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数组,还有什么更直观的方法呢?(如上所述)

ssgvzors

ssgvzors1#

这可能会帮助你更形象化。
当使用方括号[]时,第一对总是行,第二对总是列。在这两种情况下,第一维(行)保存相应Array /ArrayList的内存地址。
第二维(列)保存存储在Array/ArrayList的特定行中的相应值。
你所学到的是正确的。数组的数组类似于数组列表的数组,只是数组列表的长度是可变的。这意味着,对于数组列表的数组,宽度(列数)不是静态的。

ArrayList[] arrOfList = new ArrayList[5]

这就是说,创建一个长度为5**(5行)的**Array,* 数据类型为ArrayList(可变长度,因此可以是任意数量的列)*。

int[][] arrOfArr = new int[3][5]

也就是说,创建一个长度为3(3行)的**Array 数据类型为长度为5(5列)的Array *。
ArrayList具有可变长度这一事实可能会引起混淆,但我仍然坚持相同的答案:第一对[] =行;第二对[] =列。

ruarlubt

ruarlubt2#

int[][] arrOfArr = new int[3][5]
这将创建一个空的 * 网格 *,其中包含3行和5列的数组单元格。

[][][][][]
[][][][][]
[][][][][]

然后,要填充这些列,只需执行arrOfArr[0][2] = 4,它向下到row 0,然后跨到column 2

[][][4][][]
[][][][][]
[][][][][]

或者,将其视为一组3个批次的5个单元阵列

[][][4][][], [][][][][], [][][][][]
oalqel3c

oalqel3c3#

整数[][] arrOfArr =新整数[3][5];
//arrOfArr[3]是行数
//arrOfArr[5]是列数

相关问题