Java一维数组 #
一、数组概述 #
数组是存储相同类型数据的容器,具有以下特点:
- 固定长度
- 存储相同类型数据
- 通过索引访问
- 索引从0开始
二、数组声明 #
2.1 声明语法 #
java
// 方式1:推荐
int[] arr1;
String[] arr2;
// 方式2:不推荐
int arr3[];
String arr4[];
2.2 注意事项 #
java
// 声明时不指定长度
int[] arr; // 只是声明,还没有创建数组
// 声明多个数组
int[] a, b, c; // 三个都是int[]
int d[], e, f; // d是int[],e和f是int(不推荐)
三、数组创建 #
3.1 使用new关键字 #
java
// 创建指定长度的数组
int[] arr = new int[5]; // 创建长度为5的int数组
// 默认值
// int: 0
// double: 0.0
// boolean: false
// char: '\u0000'
// 引用类型: null
3.2 声明并创建 #
java
int[] arr = new int[5];
String[] names = new String[3];
boolean[] flags = new boolean[10];
3.3 直接初始化 #
java
// 静态初始化
int[] arr1 = {1, 2, 3, 4, 5};
String[] arr2 = {"张三", "李四", "王五"};
// 完整语法
int[] arr3 = new int[]{1, 2, 3, 4, 5};
String[] arr4 = new String[]{"A", "B", "C"};
四、数组访问 #
4.1 通过索引访问 #
java
int[] arr = {10, 20, 30, 40, 50};
// 读取元素
System.out.println(arr[0]); // 10
System.out.println(arr[2]); // 30
// 修改元素
arr[0] = 100;
System.out.println(arr[0]); // 100
4.2 数组长度 #
java
int[] arr = {1, 2, 3, 4, 5};
System.out.println(arr.length); // 5
// 注意:length是属性,不是方法
4.3 索引范围 #
java
int[] arr = {1, 2, 3};
// 有效索引:0 到 length-1
arr[0]; // 正确
arr[2]; // 正确
// 错误:索引越界
// arr[3]; // ArrayIndexOutOfBoundsException
// arr[-1]; // ArrayIndexOutOfBoundsException
4.4 安全访问 #
java
public static int safeGet(int[] arr, int index, int defaultValue) {
if (index >= 0 && index < arr.length) {
return arr[index];
}
return defaultValue;
}
五、数组遍历 #
5.1 for循环 #
java
int[] arr = {10, 20, 30, 40, 50};
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
5.2 增强for循环 #
java
int[] arr = {10, 20, 30, 40, 50};
for (int num : arr) {
System.out.println(num);
}
5.3 两种方式对比 #
java
String[] names = {"张三", "李四", "王五"};
// 需要索引时使用for
for (int i = 0; i < names.length; i++) {
System.out.println(i + ": " + names[i]);
}
// 只需要值时使用增强for
for (String name : names) {
System.out.println(name);
}
5.4 使用Arrays.toString #
java
import java.util.Arrays;
int[] arr = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(arr)); // [1, 2, 3, 4, 5]
六、数组初始化详解 #
6.1 动态初始化 #
java
// 先创建,后赋值
int[] arr = new int[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
6.2 静态初始化 #
java
// 声明时直接赋值
int[] arr = {1, 2, 3, 4, 5};
// 或使用完整语法
int[] arr2 = new int[]{1, 2, 3, 4, 5};
6.3 匿名数组 #
java
// 作为方法参数传递
printArray(new int[]{1, 2, 3, 4, 5});
public static void printArray(int[] arr) {
System.out.println(Arrays.toString(arr));
}
七、数组内存分析 #
7.1 基本类型数组 #
java
int[] arr = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
// 栈内存:存储arr引用变量
// 堆内存:存储数组对象 {10, 20, 30}
7.2 引用类型数组 #
java
String[] names = new String[3];
names[0] = "张三";
names[1] = "李四";
// 栈内存:存储names引用变量
// 堆内存:存储数组对象,元素是引用
// 字符串常量池:存储"张三"、"李四"
7.3 数组引用 #
java
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1; // arr2和arr1指向同一个数组
arr2[0] = 100;
System.out.println(arr1[0]); // 100
// 复制数组
int[] arr3 = Arrays.copyOf(arr1, arr1.length);
八、常见操作 #
8.1 求和与平均值 #
java
int[] arr = {10, 20, 30, 40, 50};
int sum = 0;
for (int num : arr) {
sum += num;
}
double avg = (double) sum / arr.length;
System.out.println("总和: " + sum); // 150
System.out.println("平均值: " + avg); // 30.0
8.2 查找最大最小值 #
java
int[] arr = {30, 10, 50, 20, 40};
int max = arr[0];
int min = arr[0];
for (int num : arr) {
if (num > max) max = num;
if (num < min) min = num;
}
System.out.println("最大值: " + max); // 50
System.out.println("最小值: " + min); // 10
8.3 查找元素 #
java
int[] arr = {10, 20, 30, 40, 50};
int target = 30;
int index = -1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == target) {
index = i;
break;
}
}
System.out.println("索引: " + index); // 2
8.4 统计元素 #
java
int[] arr = {1, 2, 3, 2, 1, 2, 3, 1, 1};
int target = 1;
int count = 0;
for (int num : arr) {
if (num == target) {
count++;
}
}
System.out.println("出现次数: " + count); // 4
九、数组作为方法参数 #
9.1 传递数组 #
java
public static void printArray(int[] arr) {
if (arr == null) {
System.out.println("数组为null");
return;
}
for (int num : arr) {
System.out.print(num + " ");
}
System.out.println();
}
// 调用
int[] nums = {1, 2, 3};
printArray(nums);
printArray(new int[]{4, 5, 6});
9.2 返回数组 #
java
public static int[] createArray(int size, int value) {
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = value;
}
return arr;
}
// 调用
int[] arr = createArray(5, 10);
// arr = {10, 10, 10, 10, 10}
十、注意事项 #
10.1 数组越界 #
java
int[] arr = {1, 2, 3};
// 错误:索引越界
// arr[3]; // ArrayIndexOutOfBoundsException
// 安全检查
int index = 3;
if (index >= 0 && index < arr.length) {
System.out.println(arr[index]);
}
10.2 空指针异常 #
java
int[] arr = null;
// 错误:空指针异常
// arr.length; // NullPointerException
// arr[0]; // NullPointerException
// 安全检查
if (arr != null && arr.length > 0) {
System.out.println(arr[0]);
}
10.3 数组长度不可变 #
java
int[] arr = {1, 2, 3};
// arr.length = 5; // 错误:不能修改长度
// 需要更大数组时,创建新数组
int[] newArr = new int[5];
System.arraycopy(arr, 0, newArr, 0, arr.length);
十一、总结 #
| 操作 | 语法 |
|---|---|
| 声明 | int[] arr; |
| 创建 | arr = new int[5]; |
| 初始化 | int[] arr = {1, 2, 3}; |
| 访问 | arr[0] |
| 长度 | arr.length |
| 遍历 | for (int num : arr) |
数组要点:
- 长度固定,创建后不可变
- 索引从0开始
- 注意越界和空指针异常
- 使用增强for循环简化遍历
最后更新:2026-03-26