Appearance
8.1 数组是什么?有什么用?
数组的概念
数组是一种数据结构,用于存储相同类型的多个元素。在 Java 中,数组是一个固定长度的容器,一旦创建,其长度就不能改变。
数组的特点
- 固定长度:数组在创建时必须指定长度,且长度一旦确定就不能改变
- 相同类型:数组中的所有元素必须是相同的数据类型
- 连续存储:数组中的元素在内存中是连续存储的
- 索引访问:数组中的元素通过索引(从 0 开始)进行访问
数组的作用
- 存储多个相同类型的数据:当需要存储多个相同类型的数据时,数组是一种方便的选择
- 快速访问元素:通过索引可以快速访问数组中的任意元素
- 简化代码:使用数组可以避免创建多个变量,简化代码结构
- 便于遍历和处理:可以使用循环快速遍历和处理数组中的所有元素
数组的应用场景
- 存储一组数据:例如,存储学生的成绩、员工的工资等
- 数据排序和搜索:例如,对一组数字进行排序或搜索
- 矩阵运算:例如,二维数组可以用于表示矩阵
- 作为函数参数:例如,将一组数据传递给函数进行处理
- 作为函数返回值:例如,函数可以返回一组数据
数组的类型
基本类型数组
java
// 整型数组
int[] numbers;
// 浮点型数组
double[] prices;
// 字符型数组
char[] characters;
// 布尔型数组
boolean[] flags;引用类型数组
java
// 字符串数组
String[] names;
// 对象数组
Person[] people;数组的长度
数组的长度是指数组中元素的个数,在 Java 中可以通过 数组名.length 来获取。
java
int[] numbers = new int[5];
System.out.println("Array length: " + numbers.length); // 输出 5数组的索引
数组的索引是从 0 开始的整数,用于访问数组中的元素。第一个元素的索引是 0,第二个元素的索引是 1,以此类推。
java
int[] numbers = {10, 20, 30, 40, 50};
System.out.println(numbers[0]); // 输出 10
System.out.println(numbers[1]); // 输出 20
System.out.println(numbers[4]); // 输出 50数组的内存结构
在 Java 中,数组是对象,存储在堆内存中。数组变量是引用类型,存储在栈内存中,指向堆内存中的数组对象。
栈内存 堆内存
numbers → [10, 20, 30, 40, 50]示例:数组的基本使用
java
public class ArrayExample {
public static void main(String[] args) {
// 创建一个整型数组
int[] numbers = new int[5];
// 给数组元素赋值
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;
// 访问数组元素
System.out.println("First element: " + numbers[0]);
System.out.println("Last element: " + numbers[4]);
// 获取数组长度
System.out.println("Array length: " + numbers.length);
// 遍历数组
System.out.println("Array elements:");
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
}
}常见问题
1. 数组索引越界
症状:运行时错误:ArrayIndexOutOfBoundsException
解决方案:确保数组索引在有效范围内(0 到 length-1)
2. 空指针异常
症状:运行时错误:NullPointerException
解决方案:确保数组已经初始化,不为 null
3. 数组长度固定
症状:无法动态增加或减少数组长度
解决方案:如果需要动态调整大小,可以使用集合类(如 ArrayList)
总结
数组是 Java 中一种重要的数据结构,用于存储相同类型的多个元素。它具有固定长度、相同类型、连续存储和索引访问等特点。
数组的主要作用包括:
- 存储多个相同类型的数据
- 快速访问元素
- 简化代码
- 便于遍历和处理
在使用数组时,需要注意数组索引越界、空指针异常等问题。如果需要动态调整大小,可以使用集合类(如 ArrayList)。
