好的!下面给你一份Java数组超详细教程,涵盖数组的定义、初始化、访问、常见操作和注意点,适合入门和进阶学习。
Java数组(超详细)
目录
- 什么是数组
- 数组的特点
- 数组的声明与创建
- 数组的初始化方式
- 访问数组元素
- 数组的遍历
- 数组常用操作
- 多维数组
- 数组与集合的区别
- 注意事项与性能建议
1. 什么是数组
数组是存储同一种数据类型的固定长度的有序集合。
每个元素在数组中都有一个索引(下标),索引从0开始。
2. 数组的特点
- 固定长度,创建后长度不可变
- 元素类型统一,只能存储声明时指定的数据类型
- 连续内存空间,便于快速访问
- 访问速度快,通过索引直接定位元素
3. 数组的声明与创建
// 声明数组变量(未分配空间)
int[] arr1;
int arr2[]; // 也可这样写,推荐第一种方式
// 创建数组,分配空间,指定长度为5
arr1 = new int[5];
// 声明并创建数组(常用)
int[] arr3 = new int[10];
new
关键字用于申请数组空间- 数组长度一旦确定不可更改
4. 数组的初始化方式
4.1 静态初始化(声明同时赋值)
int[] arr = {1, 2, 3, 4, 5};
编译器自动分配长度和空间
4.2 动态初始化(先声明,后赋值)
int[] arr = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
数组元素会被自动初始化为该类型的默认值(int默认0)
5. 访问数组元素
通过索引访问:
int value = arr[0]; // 访问第一个元素
arr[2] = 100; // 修改第三个元素值
- 索引范围是
[0, length-1]
- 访问越界会抛出
ArrayIndexOutOfBoundsException
6. 数组的遍历
6.1 for循环遍历
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
6.2 增强for循环(foreach)
for(int num : arr) {
System.out.println(num);
}
7. 数组常用操作
7.1 获取数组长度
int len = arr.length;
7.2 数组复制
int[] newArr = Arrays.copyOf(arr, arr.length);
7.3 数组排序
Arrays.sort(arr);
7.4 查找元素(简单遍历或二分查找)
int index = Arrays.binarySearch(arr, 10);
(注意:二分查找前数组必须排序)
8. 多维数组
二维数组声明和创建:
int[][] matrix = new int[3][4]; // 3行4列
// 静态初始化
int[][] matrix2 = {
{1, 2, 3},
{4, 5, 6}
};
访问元素:
int val = matrix[1][2]; // 第2行第3列元素
遍历二维数组:
for(int i=0; i<matrix.length; i++) {
for(int j=0; j<matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
9. 数组与集合的区别
维度 | 数组 | 集合(如ArrayList) |
---|---|---|
长度 | 固定,不可变 | 动态可变 |
类型 | 同类型元素 | 泛型支持不同类型 |
操作 | 访问速度快,操作简单 | 支持更多丰富方法,如增删查改 |
使用场景 | 适合固定大小数据,性能要求高 | 适合动态数据、复杂操作 |
10. 注意事项与性能建议
- 数组长度固定,若需要动态大小建议使用集合类
- 数组越界异常常见,务必确保索引合法
- 使用增强for循环更简洁,但无法获取索引
- 多维数组本质是数组的数组,可以是“锯齿形”结构
- 数组操作多用
java.util.Arrays
类辅助提高效率和简洁度 - 对大量数据频繁增删操作,集合比数组更合适
附:示例代码完整演示
import java.util.Arrays;
public class ArrayDemo {
public static void main(String[] args) {
// 声明并初始化
int[] arr = {5, 3, 8, 1, 9};
// 访问元素
System.out.println("第一个元素:" + arr[0]);
// 遍历数组
System.out.println("数组元素:");
for (int num : arr) {
System.out.print(num + " ");
}
System.out.println();
// 排序
Arrays.sort(arr);
System.out.println("排序后数组: " + Arrays.toString(arr));
// 复制数组
int[] copy = Arrays.copyOf(arr, arr.length);
System.out.println("复制的数组: " + Arrays.toString(copy));
// 多维数组
int[][] matrix = {
{1, 2},
{3, 4},
{5, 6}
};
System.out.println("二维数组元素:");
for (int i=0; i<matrix.length; i++) {
for (int j=0; j<matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}
发表回复