[Java 基础]数组
什么是数组?想象一下,你需要存储 5 个学生的考试成绩。你可以声明 5 个不同的 int 变量,但这会显得很笨拙。数组提供了一种更简洁、更有组织的方式来存储和管理这些数据。
数组可以看作是相同类型元素的集合,这些元素在内存中是连续存储的,并且可以通过一个共同的名称(数组名)和一个索引(下标)来访问。
数组的特点
- 相同类型: 数组中的所有元素必须是相同的数据类型(例如,都是 int、String 或自定义的对象类型)
- 固定长度: 数组在创建时必须指定其长度,并且一旦创建,其长度通常是不可改变的
- 连续存储: 数组中的元素在内存中是依次连续存储的,这使得可以通过索引快速访问任何位置的元素
- 索引访问: 数组中的每个元素都有一个唯一的索引(下标),用于标识其在数组中的位置。索引从 0 开始,到 数组长度 - 1 结束
声明数组只是告诉编译器我们将要创建一个存储特定类型元素的数组,并为其指定一个名称。声明数组的方法:
int[] scores; // 声明一个存储整数的数组,名为 scores
String[] names; // 声明一个存储字符串的数组,名为 names
double[] prices; // 声明一个存储双精度浮点数的数组,名为 prices
创建数组是指在内存中为数组分配实际的空间,并指定数组的长度(可以存储多少个元素)。我们使用 new 关键字来创建数组:
数组名 = new 类型[数组长度];
int[] scores = new int[5]; // 创建一个可以存储 5 个整数的数组
String[] names = new String[10]; // 创建一个可以存储 10 个字符串的数组
double[] prices = new double[100]; // 创建一个可以存储 100 个双精度浮点数的数组
在创建数组时,如果没有显式地给数组元素赋值,它们会被赋予默认值。 我们也可以在创建数组的同时直接初始化数组元素:
int[] numbers = {10, 20, 30, 40, 50}; // 创建一个包含 5 个整数的数组并赋值
String[] days = {"Monday", "Tuesday", "Wednesday"}; // 创建一个包含 3 个字符串的数组并赋值
:::color3
使用这种方式初始化时,不需要指定数组的长度,编译器会根据提供的元素个数自动确定数组的长度。
:::
当然,你也可以通过先创建再赋值的方式初始化数组:
int[] grades = new int[3]; // 创建一个长度为 3 的整数数组
grades[0] = 85; // 给第一个元素(索引为 0)赋值
grades[1] = 92; // 给第二个元素(索引为 1)赋值
grades[2] = 78; // 给第三个元素(索引为 2)赋值
创建完数组并向其中放入数据后,如果要访问数组中的特定元素,我们需要使用数组名和元素的索引(下标)。索引从 0 开始。
int[] ages = {25, 30, 22};int firstAge = ages[0]; // firstAge 的值为 25
int secondAge = ages[1]; // secondAge 的值为 30
int thirdAge = ages[2]; // thirdAge 的值为 22System.out.println("第一个年龄是:" + firstAge);
System.out.println("第二个年龄是:" + secondAge);
System.out.println("第三个年龄是:" + thirdAge);
可以使用数组的 length
属性来获取数组的长度(包含的元素个数)。length
是数组的一个只读属性,不能被修改。
int[] data = {1, 2, 3, 4, 5};
int arrayLength = data.length; // arrayLength 的值为 5
System.out.println("数组的长度是:" + arrayLength);
遍历数组是指访问数组中的每一个元素。常用的遍历方式有以下几种,最常用的就是直接使用 for 循环遍历:
int[] scores = {90, 85, 95, 88, 92};
for (int i = 0; i < scores.length; i++) {System.out.println("第 " + (i + 1) + " 个分数是:" + scores[i]);
}
相比于直接使用 for 循环遍历,更方便的一种方法是使用增强 for 循环遍历数组:
String[] colors = {"Red", "Green", "Blue"};
for (String color : colors) {System.out.println("颜色:" + color);
}
上面的这些例子都是一维的数组,Java 也支持多维数组,最常见的是二维数组。可以将二维数组看作是数组的数组,或者是一个表格。
int[][] matrix = new int[3][4]; // 创建一个 3 行 4 列的整数二维数组
int[][] numbers2D = {{1, 2, 3},{4, 5, 6},{7, 8, 9}
};
int element = numbers2D[1][2]; // 访问第二行(索引为 1)第三列(索引为 2)的元素,值为 6
System.out.println("访问的元素是:" + element);for (int i = 0; i < numbers2D.length; i++) { // 遍历行for (int j = 0; j < numbers2D[i].length; j++) { // 遍历列System.out.print(numbers2D[i][j] + " ");}System.out.println(); // 换行
}
虽然数组非常有用,但它也有一些局限性,第一就是它是固定长度的,一旦创建,长度就不能动态改变,如果需要存储的元素数量不确定,或者需要频繁地添加或删除元素,那么使用集合框架(例如 ArrayList)可能更合适;其二就是数组只能存储相同类型的元素。