数组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. 注意事项
- 数组一旦建立(开辟了内存空间),其长度就固定了(长度不可变)!
- 显然数组里的元素是有顺序的。