目录
数组是几乎所有程序设计语言都提供的一种数据存储结构。数组是名称相同,下标不同的一组变量,用来存储一组类型相同的数据。下面就来介绍数组的创建,初始化和使用。
一、数组的创建和初始化
使用数组一般需要三个步骤:
(1)声明数组:声明数组名称和元素的数据类型。
(2)创建数组:为数组元素分配存储空间。
(3)数组的初始化:为数组元素赋值。
1.数组创建
数组的创建需要使用数组需要声明,目的在于告诉编译器数组名和元素类型,格式为:
elementType [ ]arrayName;
elementType arrayName[ ];
推荐使用第一种声明方式。
创建数组将使用使用new语句,new语句的目的为数组的每个元素分配存储空间,通常来说,数组的声明和使用new语句创建会写在一条语句内,所以数组的创建的一般格式为:
elementType [ ]arrayName = new elementType[arraySize];
该语句的功能为使用new语句创建名为arrayName的数组并分配arraySize个elementType类型的存储空间。
2.数组的初始化
数组的初始化分为两种形式
动态初始化(创建数组是只指定长度),如以下实例:
int [ ]array = new int[3];
静态初始化(创建数组的同时指定内容),声明数组的同时可以使用初始化器对数组元素初始化,在一对大括号中给出数组的每个元素值,如以下实例:
int [ ]array = new int[ ]{1,2,3};
用这种方法创建的数组不能指定数组的长度,系统会根据元素个数确定数组长度。除此之外,可使用循环语句为数组动态初始化数组元素。
二、数组元素的访问
声明了一个数组,并使用new运算符为数组元素分配内存空间后,就可以使用数组中的每一个元素。格式为:
arrayName [index]
index为数组的下标,数组使用定位数组元素在内存中的地址,下标从0开始,最大下标为数组长度减1。例如,有个长度为3的名为arr的数组,想要分别访问word数组的第一、二、三个数组元素的方式为arr[0],arr[1],arr[2]。
Java提供了一个length成员变量,它表示数组元素的个数,访问该成员变量的方法为arrayName.length,如arr.length,即表示数组arr的长度。
三、数组在内存中的存储
为了提高运算效率,Java虚拟机就对空间进行了不同区域的划分,每一片区域都有特定的处理数据方式和内存管理方式。对数组的处理则牵涉到堆内存和栈内存
堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存。 |
方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。 |
int[] arr = new int[3];
System.out.println(arr); //[I@5f150435
以上方法执行,输出的结果是[I@5f150435,是数组在内存中的地址。使用new语句创建的内容,都是在堆内存中存储的,而方法中的变量arr保存的是数组的地址。
输出arr[0],就会输出arr保存的内存地址中的数组中下标为0所引用的元素。
四、二维数组
1.二维数组的创建
二维数组的使用也分为声明、创建和初始化三个步骤,二维数组拥有以下三种声明格式:
elementType [ ] [ ] arrayName;
elementType [ ] arrayName [ ];
elementType arrayName [ ] [ ];
推荐使用第一种声明方式。
创建二维数组的语句一般格式为:
elementType [ ] [ ] arrayName = new elementType[arraySize1][arraySize2];
创建二维数组时,系统会先为高维分配空间,再顺次为低维分配空间,arraySize1为高维数组的长度,arraySize2为每个低维数组的长度。二维数组的创建也使用new运算符,如以下实例:
int [ ] [ ]arr = new int [2][3];
这种方法适用于数组的低维具有相同个数的数组元素,实例表示意思为,Java定义了两个高维数组,arr[0]和arr[1],每个高维数组都有3个低维数组,arr[0]具有arr[0][0],arr[0][1],arr[0][2]这样3个低维数组,arr[1]具有arr[1][0],arr[1][1],arr[1][2]3个低维数组,以此类推。所有,对二维数组的第一维通常称为行,第二维称为列。二维数组的创建还可以用如下方式:
int [ ] [ ]arr = new int [2][ ]; //先为第一维分配空间
arr[0] = new int [3]; //再为第二维分配空间
arr[1] = new int [3];
用以上方式可分别为高维数组分配自定义个数的低维数组,如:
int [ ] [ ]arr = new int [3][ ];
arr[0] = new int [3];
arr[1] = new int [5];
arr[2] = new int [4];
与访问一维数组一样,访问二维数组元素时,下标不能超出范围,可以使用arr.length得到arr的长度,结果为3;使用arr[0].length得到arr[0]的长度,结果为3,使用arr[1].length得到arr[1]的长度,结果为5。
2.数组元素的访问
访问二维数组的元素,使用以下格式:
arrayName [index1] [index2]
以下代码为给arr[2][3]数组赋值:
arr[0][0] = 10;
arr[0][1] = 11;
arr[0][2] = 12;
arr[1][0] = 20;
arr[1][1] = 21;
arr[1][2] = 22;
二维数组的初始化也同一维数组一样,有两种初始化方式,可以使用动态初始化,也可在声明数组的同时为数组元素初始化,例如:
int arr[ ] [ ] arr = new int[ ]{{10,11,12},{20,21,22}};
除此之外,还可使用循环语句为数组动态初始化数组元素,与一维数组一致。