跳转到内容

数组

100% developed
来自维基教科书,自由的教科书,用于开放的世界

浏览 语言基础 主题:v  d  e )

一个数组类似于一个对象的表格或基本类型,通过索引进行键控。您可能已经注意到从本书开始,默认main()方法(String[] args)的奇怪参数。它是一个数组。让我们处理这个参数

Computer code 代码清单 3.15:默认数组参数。
public class ArrayExample {
  public static void main(String[] args) {
    for (int i = 0; i < args.length; ++i) {
      System.out.println("Argument #" + (i + 1) + ": " + args[i]);
    }
  }
}
Computer code 代码清单 3.15 的控制台
$ java ArrayExample This is a test
Argument #1 This
Argument #2 is
Argument #3 a
Argument #4 test

代码清单 3.15中,数组是args。它是一个String对象的数组(这里这些对象是用户在程序启动时输入的单词)。在第 4 行,一个包含的对象通过其在数组中的索引进行访问。您可以看到它的值被打印到标准输出。请注意,字符串已按正确顺序放入数组中。

基础知识

[编辑 | 编辑源代码]

在 Java 中,数组是一个对象。该对象对包含的基本类型或对象(intcharString 等)具有给定的类型。数组可以通过多种方式声明

Example 代码部分 3.52:数组声明。
int[] array1 = null;
int array2[] = null;

这些语法是相同的,但第一个语法是推荐的。它也可以通过多种方式实例化

Example 代码部分 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属性来了解数组的大小

Example 代码部分 3.54:数组大小。
int nbItems = 10;
Object[] array3 = new Object[nbItems];
System.out.println(array3.length);
Computer code 代码部分 3.54 的输出
10

数组在运行时分配,因此在数组创建表达式中指定的尺寸可以是变量(而不是像 C 中那样的常量表达式)。但是,实例化数组的尺寸永远不会改变。如果需要改变尺寸,则必须创建一个新的实例。项目可以通过其索引进行访问。注意!第一个索引是 0

Example 代码部分 3.55:数组索引。
char[] array4 = {'a', 'b', 'c', 'd', 'e'};
System.out.println(array4[2]);
array4[4] = 'z';
System.out.println(array4[4]);
Computer code 代码部分 3.55 的输出
c
z

如果您尝试访问过高的索引或负索引,将会得到一个ArrayIndexOutOfBoundsException

测试您的知识

问题 3.20:考虑以下代码

Computer code 问题 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]);
  }
}

在标准输出中会打印什么内容?

答案
Computer code 问题 3.20 的输出
can't
choosers

索引从 0 开始。因此索引 1 指向第二个字符串(can't)。共有 4 个项目,因此数组的大小为 4。因此,索引 3 指向的项目是最后一个项目(choosers)。

二维数组

[编辑 | 编辑源代码]

实际上,Java 中没有二维数组。但是,数组可以包含任何类型的对象,包括数组

Example 代码部分 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}};

它并不完全等同于二维数组,因为子数组的大小可能不同。子数组引用甚至可以为空。考虑一下

Example 代码部分 3.57:奇怪的二维数组。
String[][] weirdTwoDimArray = {{"10", "11", "12"},
                               null,
                               {"20", "21", "22", "23", "24"}};

请注意,二维数组的长度是它包含的一维数组的数量。在上面的例子中,weirdTwoDimArray.length 是 3,而 weirdTwoDimArray[2].length 是 5。

代码部分 3.58中,我们定义了一个包含三个元素的数组,每个元素都包含一个包含 5 个元素的数组。我们可以先创建包含 5 个元素的数组,然后在初始化块中使用它。

Example 代码部分 3.58:包含的数组。
String[] oneDimArray = {"00", "01", "02", "03", "04"};
String[][] twoDimArray = {oneDimArray,
                          {"10", "11", "12", "13", "14"},
                          {"20", "21", "22", "23", "24"}};
测试您的知识

问题 3.21:考虑以下代码

Example 问题 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"}};

在标准输出中打印整个字母表。

答案
Computer code 问题 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[][]...[]


华夏公益教科书