当前位置: 首页 > java >正文

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

http://www.xdnf.cn/news/12232.html

相关文章:

  • 8086的简化版8088
  • PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的区别
  • B+树知识点总结
  • Python训练营打卡Day45
  • Java高级 | 【实验五】Spring boot+mybatis操作数据库
  • 【网络安全】XSS攻击
  • Docker 与容器技术的未来:从 OCI 标准到 eBPF 的演进
  • EFI(x64)简易开发环境
  • 第七十四篇 高并发场景下的Java并发容器:用生活案例讲透技术原理
  • 一个基于Java的简单抢单功能实现示例,模拟多线程环境下的并发抢单场景
  • 【运维心得】内存占用虚标真相
  • ES6模块化
  • Java并发编程实战 Day 9:锁优化技术
  • `sendto()` / `recvfrom()` - 发送/接收数据(UDP)
  • 85.AI问答界面添加应用功能
  • 群晖NAS套件历史版本资源
  • HikariCP数据库连接池原理解析
  • IDEA202403 设置主题和护眼色
  • Rust Floem UI 框架使用简介
  • LabVIEW自感现象远程实验平台
  • 白银6月想法
  • YOLO在QT中的完整训练、验证与部署方案
  • Springboot独立学院资产管理系统k0o7w(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 云计算 Linux Rocky day05【rpm、yum、history、date、du、zip、ln】
  • SSRF漏洞
  • 使用VSCode开发Flask指南
  • 大二下期末
  • mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
  • 面试心得 --- 车载诊断测试常见的一些面试问题
  • 2025Go面试八股(含100道答案)