Skip to content

数组

2.7 数组

  • 数组是用来存放一组相同数据类型的容器。

  • 数组中每一项被称为元素

  • 每个数组自动的隐含了一个标识其长度的属性length,可以使用arrayName.length表达式来获取。

  • 数组的下标从 0 开始,到其长度减 1 结束。

  • 在内存中,数据部分存放在堆内存,并在栈内存存放一个指向该数据的引用。

2.7.1 声明

数组的声明包含两部分:数组的类型数组的名称
格式
1.

java
type[] arrayName;
java
type arrayName[];

2.7.2 创建

一个数组在声明时不会真正在堆内存分配空间,而只在栈内存生成了一个指向null的地址引用。
我们使用new关键字来创建数组。
格式

java
arrayName = new type[num];

下面是一个创建包含 10 个int元素的数组的例子:

java
anArray = new int[10];

2.7.3 初始化

数组在创建完成后,程序会自动给该数组赋该数组类型的默认值,默认值详见数据类型
我们可以手动对每个元素进行赋值:

java
anArray[0] = 100; // initialize first element
anArray[1] = 200; // initialize second element
anArray[2] = 300; // and so forth

合并声明、创建和初始化

以下两种缩写形式可以将数组的声明、创建和初始化合并在一条语句中。
1.

java
type[] arrayName = new type[]{e1, e2, ...};
java
type[] arrayName = {e1, e2, ...};

注意

数组一经创建,其长度即固定,不可改变

2.7.4 多维数组

简单讲,多维数组是“数组的数组”。n 维数组的每一个元素都是 n-1 维数组。
下面是一个多维数组的例子:
Input

java
class MultiDimArrayDemo {
    public static void main(String[] args) {

        String[][] names = {
            {"Mr. ", "Mrs. ", "Ms. "},
            {"Smith", "Jones"}
        };
        // Mr. Smith
        System.out.println(names[0][0] + names[1][0]);
        // Ms. Jones
        System.out.println(names[0][2] + names[1][1]);
    }
}

Output

Mr. Smith
Ms. Jones

2.7.5 使用

  • 访问元素
    使用arrayName[index]表达式来访问某元素。

  • 数组复制
    数组的名称仅仅标识了对数组数据的引用,所以下面的代码中,两个数组指向的是堆内存中同一个数组数据。

    java
    int[] arr1 = {1, 2, 3};
    int[] arr2 = arr1;

    Java 在System类中提供了arraycopy()方法用来复制一个数组,其本质是在堆内存中生成一个新的内容相同的数组数据。
    其具体参数是:

    java
    System.arraycopy(src, srcPos, dest, destPos, length)

    可以将数组src中,从srcPos开始的length个元素复制到dest数组的destPos位置。