Java 数组
学习数组 · 难度:入门 · +10XP
Java 数组详解
数组是 Java 中最基本的容器类型,用于存储固定数量的相同类型元素。数组在内存中是连续分配的,这使得它的访问速度非常快(通过索引 O(1) 访问),但大小一旦确定就无法改变。掌握数组是学习更高级集合类(ArrayList、HashMap 等)的基础。
数组的声明与初始化
Java 数组的声明使用 类型[] 变量名 语法。数组可以用 new 关键字创建(元素为默认值),也可以在声明时直接初始化(静态初始化)。
public class ArrayDemo {
public static void main(String[] args) {
// 方式一:声明后分配空间(元素默认值: int -> 0)
int[] scores = new int[5];
scores[0] = 90;
scores[1] = 85;
scores[2] = 78;
// 方式二:声明时直接初始化
String[] names = {"张三", "李四", "王五", "赵六"};
// 方式三:先声明再赋值
double[] prices;
prices = new double[]{19.99, 29.99, 9.99};
// 获取数组长度
System.out.println("names 数组长度: " + names.length);
}
}
数组的遍历方式
| 遍历方式 | 语法 | 适用场景 |
|---|---|---|
| for 循环 | for (int i=0; i<arr.length; i++) | 需要访问索引时 |
| 增强 for / for-each | for (int x : arr) | 只读取值,不关心索引 |
| Arrays.toString() | System.out.println(Arrays.toString(arr)); | 快速打印数组内容 |
| Stream API(Java 8+) | Arrays.stream(arr).forEach(System.out::println); | 链式操作、过滤、映射 |
import java.util.Arrays;
int[] numbers = {5, 2, 8, 1, 9, 3};
// 排序
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers)); // [1, 2, 3, 5, 8, 9]
// 二分查找(数组必须已排序)
int index = Arrays.binarySearch(numbers, 5);
System.out.println("5 的索引: " + index);
// 填充
int[] arr = new int[5];
Arrays.fill(arr, 100);
System.out.println(Arrays.toString(arr)); // [100, 100, 100, 100, 100]
// 比较
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
System.out.println(Arrays.equals(arr1, arr2)); // true
多维数组
Java 的多维数组本质上是「数组的数组」。二维数组可以看作是一个表格(行 + 列),三维则是立体的数据模型。Java 的多维数组允许每一行的长度不同(锯齿数组)。
// 二维数组:矩阵
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
// 遍历二维数组
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();
}
- 创建长度为 10 的整数数组,用 1-100 的随机数填充,找出最大值和最小值
- 将上一步的数组排序后,使用二分查找搜索某一个值的位置
- 用二维数组表示 3x3 的井字棋棋盘,编写方法判断是否有玩家获胜
- 实现
reverseArray方法,反转数组中的元素顺序(不创建新数组) - 创建长度为 6 的字符串数组,去除其中所有重复的元素