🌱 数组 (Array)
📌 特点
- 固定大小:数组在创建时需要指定大小,之后不能动态地增加或减少。
- 连续的内存:数组的元素在内存中是连续存放的,这使得访问速度非常快。
- 索引访问:可以通过索引直接访问数组中的任何元素。
- 插入/删除开销大:插入或删除元素,特别是在数组中间位置时,可能需要移动大量元素。
- 类型固定:数组只能存放单一类型的数据(例如,
int
、double
、Object
)。
📌 Java中常用的数组
- 基本类型数组:例如
int[]
,double[]
,char[]
等。 - 对象数组:例如
String[]
,Object[]
或其他对象类型的数组。 - 多维数组:例如
int[][]
(二维数组),int[][][]
(三维数组)等。
📌 Java中数组的使用
-
声明与初始化:
int[] arr1 = new int[5]; // 定义一个长度为5的整数数组 int[] arr2 = {1, 2, 3, 4, 5}; // 定义并初始化一个整数数组 String[] strArray = new String[3]; // 定义一个长度为3的字符串数组
-
访问数组元素:
int firstElement = arr2[0]; // 获取数组的第一个元素
-
修改数组元素:
arr2[0] = 6; // 修改数组的第一个元素为6
-
数组长度:
int length = arr2.length; // 获取数组的长度
-
遍历数组:
使用for循环:
for (int i = 0; i < arr2.length; i++) { System.out.println(arr2[i]); }
使用增强型for循环 (foreach):
for (int num : arr2) { System.out.println(num); }
-
多维数组:
int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int element = matrix[1][2]; // 获取第二行第三列的元素 (6)
📌 常用场景
- 数据处理:当你需要处理固定数量的相似类型的数据时,例如像素值、成绩列表等。
- 算法实现:许多基础算法,如排序算法(冒泡排序、插入排序等),都是基于数组实现的。
- 缓存机制:有时数组用作缓存,以便快速读取和临时存储数据。
- 查找操作:当你需要快速访问数据集中的特定元素时,如在哈希表实现中。
- 多维数据:使用多维数组,例如二维数组,可以表示矩阵、图像等。
在Java和Spring的上下文中,数组主要用于配置和数据处理。例如,Spring Boot的命令行参数是作为字符串数组传递的。但随着集合框架的普及,如List
和Set
,它们提供了更大的灵活性和操作,数组在许多场景中已经被这些更高级的数据结构所替代。
⚡️ 使用 Java 8 Stream API 操作数组
📝 1. 创建 Stream
从数组创建:
int[] numbers = {1, 2, 3, 4, 5};
IntStream numberStream = Arrays.stream(numbers);
📝 2. 常用操作
- Filter:
过滤数组中的元素。
int[] numbers = {1, 2, 3, 4, 5};
Arrays.stream(numbers)
.filter(n -> n % 2 == 0)
.forEach(System.out::println); // 输出 2 和 4
- Map:
将数组中的每个元素转换为另一种形式。
String[] words = {"hello", "world"};
Arrays.stream(words)
.map(String::toUpperCase)
.forEach(System.out::println); // 输出 HELLO, WORLD
- Sorted:
对数组中的元素进行排序。
int[] numbers = {5, 3, 1, 4, 2};
Arrays.stream(numbers)
.sorted()
.forEach(System.out::println); // 输出 1, 2, 3, 4, 5
- Average:
计算数组中的元素的平均值。
int[] numbers = {1, 2, 3, 4, 5};
double average = Arrays.stream(numbers)
.average()
.getAsDouble();
System.out.println(average); // 输出 3.0
- Min/Max:
找到数组中的最小或最大值。
int[] numbers = {5, 3, 1, 4, 2};
int min = Arrays.stream(numbers)
.min()
.getAsInt();
int max = Arrays.stream(numbers)
.max()
.getAsInt();
System.out.println(min); // 输出 1
System.out.println(max); // 输出 5
- Collect:
将 Stream 的结果收集到另一种数据结构。
String[] words = {"hello", "world"};
List<String> wordList = Arrays.stream(words)
.map(String::toUpperCase)
.collect(Collectors.toList());
这只是一些基础的操作,Java 8 的 Stream API 提供了许多其他功能来处理数组和其他数据源。
⚡️ 使用 commons-lang3 操作数组
-
加入依赖
首先,您需要在 Maven 项目的
pom.xml
中添加以下依赖:<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency>
-
常用操作
-
isEmpty / isNotEmpty:
int[] array = {1, 2, 3}; boolean isEmpty = ArrayUtils.isEmpty(array);
-
Add element:
int[] array = {1, 2, 3}; array = ArrayUtils.add(array, 4); // Result: {1, 2, 3, 4}
-
Remove element:
int[] array = {1, 2, 3, 4}; array = ArrayUtils.remove(array, 2); // Result: {1, 2, 4}
⚡️ 使用 guava 操作数组
-
加入依赖
首先,您需要在 Maven 项目的
pom.xml
中添加以下依赖:<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>30.1-jre</version> </dependency>
-
常用操作
-
Join / Split:
int[] array = {1, 2, 3, 4}; String joinResult = Ints.join(",", array); // Result: "1,2,3,4" int[] splitResult = Ints.toArray(Ints.asList(1, 2, 3, 4));
-
Contains:
int[] array = {1, 2, 3, 4}; boolean contains = Ints.contains(array, 3); // true
-
Min / Max:
int[] array = {1, 2, 3, 4}; int min = Ints.min(array); // 1 int max = Ints.max(array); // 4
以上只是这两个库中的一些常用方法。它们都包含了许多其他的实用功能,您可以查阅官方文档或源代码以了解更多。