了解如何创建多维数组和不规则数组并在复杂的 Java 程序中使用它们
Java 中的数据结构和算法,第 2 部分 介绍了用于搜索和排序一维数组的各种技术,它们是最简单的数组。在本教程中,您将探索多维数组。我将向您展示创建多维数组的三种方法,然后您将学习如何使用矩阵乘法算法将二维数组中的元素相乘。我还将介绍参差不齐的数组,您将了解为什么它们在大数据应用程序中很受欢迎。最后,我们将考虑数组是否是Java 对象的问题。
本文为第 4 部分做准备,该部分介绍了 使用单向链表进行搜索和排序。
多维数组
甲多维数组具有多个索引阵列中的每个元素相关联。最常用的多维数组是二维数组,也称为表或矩阵。二维数组将其每个元素与两个索引相关联。
我们可以将二维数组概念化为由元素组成的矩形网格,分为行和列。我们使用(row, column)符号来标识一个元素,如图 1 所示。
因为二维数组非常常用,所以我将重点介绍它们。您对二维数组的了解可以推广到更高维的数组。
创建二维数组
在 Java 中创建二维数组共有三种技术:
- 使用初始化程序
- 使用关键字 new
- 将关键字new与初始化程序一起使用
使用初始化器创建二维数组
- 创建二维数组的仅初始化方法具有以下语法:
'{' [rowInitializer (',' rowInitializer)*] '}'
- rowInitializer 具有以下语法:
'{' [expr (',' expr)*] '}'
此语法指出,二维数组是一个可选的、以逗号分隔的行初始值设定项列表,这些行初始值设定项出现在左括号和右括号字符之间。此外,每个行初始值设定项都是一个可选的、以逗号分隔的表达式列表,它们出现在左括号和右括号字符之间。与一维数组一样,所有表达式都必须计算为兼容的类型。
- 下面是一个二维数组的例子:
{
{
20.5, 30.6, 28.3 }, {
-38.7, -18.3, -16.2 } }
本示例创建一个包含两行三列的表。图 2 展示了此表的概念视图以及显示 Java 如何在内存中布置此(以及每个)表的内存视图。
图 2 显示 Java 将二维数组表示为一维行数组,其元素引用一维列数组。行索引标识列数组;列索引标识数据项。
关键字 new-only 创建
- 关键字new为二维数组分配内存并返回其引用。此方法具有以下语法:
'new' type '[' int_expr1 ']' '['int_expr2 ']'
- 此语法指出,二维数组是所有共享相同的(正)int_expr1行元素和(正)int_expr2列元素的区域type。此外,所有元素都归零。下面是一个例子:
new double[2][3] // Create a two-row-by-three-column table.
关键字 new 和初始化程序创建
- new带有初始化方法的关键字具有以下语法:
'new' type '[' ']' [' ']' '{
' [rowInitializer (',' rowInitializer)*] '}'
- whererowInitializer有以下语法:
'{' [expr (',' expr)*] '}'
此语法融合了前两个示例。因为可以从逗号分隔的表达式列表中确定元素的数量,所以您不需要int_expr在任何一对方括号之间提供。下面是一个例子:
new double [][] {
{
20.5, 30.6, 28.3 }, {
-38.7, -18.3, -16.2 } }
二维数组和数组变量
- 就其本身而言,新创建的二维数组是无用的。它的引用必须直接或通过方法调用分配给兼容类型的数组变量。以下语法显示了如何声明此变量:
type var_name '[' ']' '[' ']'
type '[' ']' '[' ']' var_name
- 每个语法声明一个数组变量,用于存储对二维数组的引用。最好将方括号放在type. 考虑以下示例:
double[][] temperatures1 = {
{
20.5, 30.6, 28.3 }, {
-38.7, -18.3, -16.2 } };
double[][] temperatures2 = new double[2][3];
double[][] temperatures3 = new double[][] {
{
20.5, 30.6, 28.3 }, {
-38.7, -18.3, -16.2 } };
与一维数组变量一样,二维数组变量与一个.length属性相关联,该属性返回行数组的长度。例如,temperatures1.length返回 2。每个行元素也是一个具有.length属性的数组变量,该属性返回分配给行元素的列数组的列数。例如