基本概念
数组是Java中一种基本的数据结构,用于存储固定大小的相同类型的数据元素。在Java中,数组是对象,存储在堆内存中,数组在内存中是连续分配的,可以通过索引快速访问元素。数组的索引从0开始,最大索引为数组长度减1。
数组的声明与初始化
数组的声明需要指定元素类型和数组名称。初始化可以在声明时直接完成,也可以在后续代码中完成。
数组的声明方式为数据类型[] 数组名或数据类型 数组名[]。初始化分为静态初始化和动态初始化。
静态初始化直接指定元素值:
// 静态初始化 直接初始化数组
int[] arr1 = {1, 2, 3};
String[] arr2 = new String[]{"A", "B"};
动态初始化指定长度后赋值:
// 声明数组
int[] numbers;
// 初始化数组
numbers = new int[5];
// 赋值
numbers [0] = 10;
// 声明并初始化数组
int[] scores = new int[3];
// 赋值
scores [0] = 10;
数组的访问与修改
数组元素可以通过索引访问和修改。索引必须是整数,且不能超出数组范围(即数组长度减1),否则会抛出ArrayIndexOutOfBoundsException。
数组的访问通过索引完成,索引从0开始。使用方括号[]指定索引位置,直接获取对应元素的值。例如:
int[] numbers = {10, 20, 30, 40, 50};
// 访问第一个元素,值为10
int firstElement = numbers[0];
// 访问第三个元素,值为30
int thirdElement = numbers[2];
通过索引定位到数组元素后,可以直接赋值来修改元素的值:
int[] numbers = {10, 20, 30, 40};
numbers[1] = 200; // 修改第二个元素为200
System.out.println(numbers[1]); // 输出200
数组的遍历
数组的遍历可以通过for循环或使用增强for循环(for-each循环)、while循环以及使用Java 8的Stream API实现。
- 通过
for循环遍历:
int[] numbers = {1, 2, 3, 4, 5};
// 使用for循环
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
- 使用增强for循环(for-each循环):
int[] numbers = {1, 2, 3, 4, 5};
// 使用for-each循环
for (int num : numbers) {
System.out.println(num);
}
- while循环:
int[] numbers = {1, 2, 3, 4, 5};
int i = 0;
// while循环
while (i < numbers.length) {
System.out.println(numbers[i]);
i++;
}
- 使用Java 8的Stream API:
int[] numbers = {1, 2, 3, 4, 5};
// 使用Stream API
Arrays.stream(numbers).forEach(System.out::println);
多维数组
Java支持多维数组,最常见的是二维数组。多维数组的声明和初始化与一维数组类似。
// 声明二维数组
int[][] matrix;
// 初始化二维数组
matrix = new int[3][3];
// 直接初始化二维数组
int[][] grid = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 访问二维数组元素
int value = grid[1][2]; // 6
注意:
1、多维数组在内存中不一定是连续存储的
2、访问不存在的索引会抛出ArrayIndexOutOfBoundsException
3、未初始化的第二维数组默认为null
4、使用Arrays.deepToString()可以方便地打印多维数组内容
5、多维数组在处理矩阵、表格数据、图像处理等场景中非常有用。
数组的常用操作
Java提供了Arrays类,包含许多对数组操作的实用方法。
- 数组排序:
import java.util.Arrays;
int[] numbers = {5, 3, 8, 1, 2};
// 数组排序
Arrays.sort(numbers); // {1, 2, 3, 5, 8}
- 查找元素:
import java.util.Arrays;
int[] numbers = {5, 3, 8, 1, 2};
// 查找元素
int index = Arrays.binarySearch(numbers, 3); // 2
- 填充数组:
import java.util.Arrays;
int[] numbers = {5, 3, 8, 1, 2};
// 填充数组
Arrays.fill(numbers, 0); // {0, 0, 0, 0, 0}
- 复制数组
import java.util.Arrays;
int[] numbers = {5, 3, 8, 1, 2};
// 复制数组
int[] copy = Arrays.copyOf(numbers, numbers.length);
数组与集合的转换
数组可以转换为集合(如List),方便使用集合提供的丰富操作。
import java.util.Arrays;
import java.util.List;
Integer[] numbers = {1, 2, 3, 4, 5};
// 数组转List
List<Integer> list = Arrays.asList(numbers);
// 使用 Java 8 Stream (推荐)
List<Integer> listStream = Arrays.stream(numbers ).collect(Collectors.toList());
// 数组转set
Set<Integer> set = new HashSet<>(Arrays.asList(array));
// 或使用 Stream
Set<Integer> set = Arrays.stream(array).collect(Collectors.toSet());
// List转数组
Integer[] array = list.toArray(new Integer[0]);
注意:
使用 Arrays.asList()返回的 List 是 Arrays 的内部类,不是 ArrayList,固定大小(不能添加或删除元素)
数组的注意事项
数组的长度是固定的,一旦创建无法改变。如果需要动态扩展或收缩,可以考虑使用ArrayList等集合类。
数组可以存储基本类型和对象类型,但对象数组存储的是对象的引用,而非对象本身。
数组的默认初始化值取决于元素类型。数值类型为0,布尔类型为false,对象类型为null。
int[] intArray = new int[3]; // {0, 0, 0}
boolean[] boolArray = new boolean[2]; // {false, false}
String[] strArray = new String[3]; // {null, null, null}
通过以上内容,可以全面了解Java数组的基本概念、使用方法及常见操作。
1207

被折叠的 条评论
为什么被折叠?



