数组
浏览 语言基础 主题: ) |
一个数组类似于一个对象的表格或基本类型,通过索引进行键控。您可能已经注意到从本书开始,默认main()
方法(String[] args
)的奇怪参数。它是一个数组。让我们处理这个参数
|
|
在代码清单 3.15中,数组是args
。它是一个String
对象的数组(这里这些对象是用户在程序启动时输入的单词)。在第 4 行,一个包含的对象通过其在数组中的索引进行访问。您可以看到它的值被打印到标准输出。请注意,字符串已按正确顺序放入数组中。
在 Java 中,数组是一个对象。该对象对包含的基本类型或对象(int
、char
、String
等)具有给定的类型。数组可以通过多种方式声明
代码部分 3.52:数组声明。
int[] array1 = null;
int array2[] = null;
|
这些语法是相同的,但第一个语法是推荐的。它也可以通过多种方式实例化
代码部分 3.53:数组实例化。
array1 = new int[10];
int[] array0 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //this only works in the declaration
array1 = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
|
在第 1 行,我们实例化了一个包含 10 个项目的数组,这些项目获得默认值(对于int
来说是 0)。在第 2 行和第 3 行,我们实例化了包含 10 个给定项目的数组。每个项目都将根据其顺序获得一个索引。我们可以使用length
属性来了解数组的大小
|
|
数组在运行时分配,因此在数组创建表达式中指定的尺寸可以是变量(而不是像 C 中那样的常量表达式)。但是,实例化数组的尺寸永远不会改变。如果需要改变尺寸,则必须创建一个新的实例。项目可以通过其索引进行访问。注意!第一个索引是 0
|
|
如果您尝试访问过高的索引或负索引,将会得到一个ArrayIndexOutOfBoundsException
。
问题 3.20:考虑以下代码
问题 3.20:Question20.java
public class Question20 {
public static void main(String[] args) {
String[] listOfWord = {"beggars", "can't", "be", "choosers"};
System.out.println(listOfWord[1]);
System.out.println(listOfWord[listOfWord.length-1]);
}
}
|
在标准输出中会打印什么内容?
问题 3.20 的输出
can't choosers |
索引从 0 开始。因此索引 1 指向第二个字符串(can't
)。共有 4 个项目,因此数组的大小为 4。因此,索引 3 指向的项目是最后一个项目(choosers
)。
实际上,Java 中没有二维数组。但是,数组可以包含任何类型的对象,包括数组
代码部分 3.56:二维数组。
String[][] twoDimArray = {{"a", "b", "c", "d", "e"},
{"f", "g", "h", "i", "j"},
{"k", "l", "m", "n", "o"}};
int[][] twoDimIntArray = {{ 0, 1, 2, 3, 4},
{10, 11, 12, 13, 14},
{20, 21, 22, 23, 24}};
|
它并不完全等同于二维数组,因为子数组的大小可能不同。子数组引用甚至可以为空。考虑一下
代码部分 3.57:奇怪的二维数组。
String[][] weirdTwoDimArray = {{"10", "11", "12"},
null,
{"20", "21", "22", "23", "24"}};
|
请注意,二维数组的长度是它包含的一维数组的数量。在上面的例子中,weirdTwoDimArray.length
是 3,而 weirdTwoDimArray[2].length
是 5。
在代码部分 3.58中,我们定义了一个包含三个元素的数组,每个元素都包含一个包含 5 个元素的数组。我们可以先创建包含 5 个元素的数组,然后在初始化块中使用它。
代码部分 3.58:包含的数组。
String[] oneDimArray = {"00", "01", "02", "03", "04"};
String[][] twoDimArray = {oneDimArray,
{"10", "11", "12", "13", "14"},
{"20", "21", "22", "23", "24"}};
|
问题 3.21:考虑以下代码
问题 3.21:字母表。
String[][] alphabet = {{"a", "b", "c", "d", "e"},
{"f", "g", "h", "i", "j"},
{"k", "l", "m", "n", "o"},
{"p", "q", "r", "s", "t"},
{"u", "v", "w", "x", "y"},
{"z"}};
|
在标准输出中打印整个字母表。
问题 3.21:Answer21.java
public class Answer21 {
public static void main(String[] args) {
String[][] alphabet = {{"a", "b", "c", "d", "e"},
{"f", "g", "h", "i", "j"},
{"k", "l", "m", "n", "o"},
{"p", "q", "r", "s", "t"},
{"u", "v", "w", "x", "y"},
{"z"}};
for (int i = 0; i < alphabet.length; i++) {
for (int j = 0; j < alphabet[i].length; j++) {
System.out.println(alphabet[i][j]);
}
}
}
}
|
i
将是主数组的索引,j
将是所有子数组的索引。我们必须先遍历主数组。我们必须读取数组的大小。然后,我们遍历每个子数组。我们必须读取每个数组的大小,因为它可能不同。这样做,我们使用索引遍历所有子数组项目。所有项目将按正确顺序读取。
可以定义任意数量的维数组。
elementType[][]...[] arrayName |
或
elementType arrayName[][]...[] |