数组Array

数组是最基本的数据集合类型,这里的数据集合和数学上的集合不同,这里指Collections,多个数据放在一起。

1. 声明一个数组

通过在基本类型后添加一个[]来声明一个数组。

String[] strings; // 字符串数组
int[] intNums; // 多个int构成的数组
double[] doubleNums; // double类型的数组
Cat[] cats;  // Cat类型的数组,可以储存多个Cat

注.

  • (1) 上诉Cat[] cats需要有一个Cat类,Cat[]就是一个Cat类型的数组,可以存储多个Cat类的对象;
  • (2) 上述代码只声明了数组变量,在变量表中添加了变量名(只有个名字),并没有在堆上开辟内存空间用来存储相应的数据(如下图所示);此时如果想要读取其中数据就会出现NullPointerException空指针异常;

Fig.1. 声明数组,未开辟空间存储数据

2. 声明数组并开辟存储空间

String[] strings = new String[3]; // 长度为3的字符串数组(可以存储3个字符串)
int[] intNums; // 声明int类型的数组
intNums = new int[4];  // 开辟长度为4的存储空间(可以存储4个int)

double[] doubleNums;   // 未开辟存储空间
Cat[] cats;		// 未开辟存储空间

上述代码中:

  • 声明了strings为String类型的数组,并同时为其开辟了长度为3的存储空间;
  • 先声明int类型的数组intNums, 随后为其开辟长度为4的存储空间(需要放在方法里);

对应的存储状态如下图所示。

Fig.2. 声明数组并开辟存储空间

3. 为数组元素赋值,获取数组元素的值

public class ArrayExample {
	public static void main(String[] args) {
		String[] strings = new String[3]; 
		
		strings[0] = "The 1st string";
		strings[1] = "The 2nd string";
		strings[2] = "The 3rd string";
		
		// 通过index获取元素的值
		for(int i = 0; i < strings.length; i++) {
			System.out.println(strings[i]); // 获取第i个元素的值,并打印
		}
		
		// 另一种循环方式
		for(String s : strings) {  // 可理解为:对strings里每一个字符串 s
			System.out.println("another loop method: " + s);
		}
	}

}

注.

  • 数组下标是从0开始的
  • 上面代码通过strings.length获取strings数组的长度;
  • 上述代码中strings长度为3,因此下标只能是0, 1, 2。如果调用strings[3]就会出现下标越界异常ArrayIndexOutOfBoundsException

4. 另一种创建数组并初始化的方法

String[] strings = {"str1", "str2", "str3"};
int[] intNums = {1, 3, 5, 7};

其对应的内存状态如下图所示。

Fig.3. 赋值后的数组

5. 注意事项

  • 数组一旦建立(开辟了内存空间),其长度就固定了(长度不可变)!
  • 显然数组里的元素是有顺序的