[Java 基础]数组

什么是数组?想象一下,你需要存储 5 个学生的考试成绩。你可以声明 5 个不同的 int 变量,但这会显得很笨拙。数组提供了一种更简洁、更有组织的方式来存储和管理这些数据。

数组可以看作是相同类型元素的集合,这些元素在内存中是连续存储的,并且可以通过一个共同的名称(数组名)和一个索引(下标)来访问。

数组的特点

  • 相同类型: 数组中的所有元素必须是相同的数据类型(例如,都是 int、String 或自定义的对象类型)
  • 固定长度: 数组在创建时必须指定其长度,并且一旦创建,其长度通常是不可改变的
  • 连续存储: 数组中的元素在内存中是依次连续存储的,这使得可以通过索引快速访问任何位置的元素
  • 索引访问: 数组中的每个元素都有一个唯一的索引(下标),用于标识其在数组中的位置。索引从 0 开始,到 数组长度 - 1 结束

声明数组只是告诉编译器我们将要创建一个存储特定类型元素的数组,并为其指定一个名称。声明数组的方法:

java 复制代码
int[] scores;         // 声明一个存储整数的数组,名为 scores
String[] names;       // 声明一个存储字符串的数组,名为 names
double[] prices;      // 声明一个存储双精度浮点数的数组,名为 prices

创建数组是指在内存中为数组分配实际的空间,并指定数组的长度(可以存储多少个元素)。我们使用 new 关键字来创建数组:

java 复制代码
数组名 = new 类型[数组长度];
java 复制代码
int[] scores = new int[5];    // 创建一个可以存储 5 个整数的数组
String[] names = new String[10]; // 创建一个可以存储 10 个字符串的数组
double[] prices = new double[100]; // 创建一个可以存储 100 个双精度浮点数的数组

在创建数组时,如果没有显式地给数组元素赋值,它们会被赋予默认值。 我们也可以在创建数组的同时直接初始化数组元素:

java 复制代码
int[] numbers = {10, 20, 30, 40, 50}; // 创建一个包含 5 个整数的数组并赋值
String[] days = {"Monday", "Tuesday", "Wednesday"}; // 创建一个包含 3 个字符串的数组并赋值

:::color3

使用这种方式初始化时,不需要指定数组的长度,编译器会根据提供的元素个数自动确定数组的长度。

:::

当然,你也可以通过先创建再赋值的方式初始化数组:

java 复制代码
int[] grades = new int[3]; // 创建一个长度为 3 的整数数组
grades[0] = 85;           // 给第一个元素(索引为 0)赋值
grades[1] = 92;           // 给第二个元素(索引为 1)赋值
grades[2] = 78;           // 给第三个元素(索引为 2)赋值

创建完数组并向其中放入数据后,如果要访问数组中的特定元素,我们需要使用数组名和元素的索引(下标)。索引从 0 开始。

java 复制代码
int[] ages = {25, 30, 22};

int firstAge = ages[0]; // firstAge 的值为 25
int secondAge = ages[1]; // secondAge 的值为 30
int thirdAge = ages[2];  // thirdAge 的值为 22

System.out.println("第一个年龄是:" + firstAge);
System.out.println("第二个年龄是:" + secondAge);
System.out.println("第三个年龄是:" + thirdAge);

可以使用数组的 length 属性来获取数组的长度(包含的元素个数)。length 是数组的一个只读属性,不能被修改。

java 复制代码
int[] data = {1, 2, 3, 4, 5};
int arrayLength = data.length; // arrayLength 的值为 5
System.out.println("数组的长度是:" + arrayLength);

遍历数组是指访问数组中的每一个元素。常用的遍历方式有以下几种,最常用的就是直接使用 for 循环遍历:

java 复制代码
int[] scores = {90, 85, 95, 88, 92};
for (int i = 0; i < scores.length; i++) {
    System.out.println("第 " + (i + 1) + " 个分数是:" + scores[i]);
}

相比于直接使用 for 循环遍历,更方便的一种方法是使用增强 for 循环遍历数组:

java 复制代码
String[] colors = {"Red", "Green", "Blue"};
for (String color : colors) {
    System.out.println("颜色:" + color);
}

上面的这些例子都是一维的数组,Java 也支持多维数组,最常见的是二维数组。可以将二维数组看作是数组的数组,或者是一个表格。

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)可能更合适;其二就是数组只能存储相同类型的元素。

相关推荐
拂晓银砾27 分钟前
Java数据结构-栈
java·数据结构
甄超锋40 分钟前
Java Maven更换国内源
java·开发语言·spring boot·spring·spring cloud·tomcat·maven
m0_719084111 小时前
sharding-jdbc读写分离配置
java
还是鼠鼠2 小时前
tlias智能学习辅助系统--Maven 高级-私服介绍与资源上传下载
java·spring boot·后端·spring·maven
Xiaokai丶2 小时前
Java 8 新特性深度剖析:核心要点与代码实战
java
灵魂猎手2 小时前
3. MyBatis Executor:SQL 执行的核心引擎
java·后端·源码
Galaxy在掘金2 小时前
从业8年,谈谈我认知的后端架构之路-1
java·架构
努力努力再努力wz3 小时前
【c++深入系列】:万字详解模版(下)
java·c++·redis
瓦特what?4 小时前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘
是乐谷4 小时前
阿里云杭州 AI 产品法务岗位信息分享(2025 年 8 月)
java·人工智能·阿里云·面试·职场和发展·机器人·云计算