Java数组工具类
外观
Java数组工具类[编辑 | 编辑源代码]
Java数组工具类(Java Array Utilities)是指Java标准库中提供的用于操作数组的工具类集合,主要包括java.util.Arrays
和java.lang.reflect.Array
。这些类提供了静态方法来实现数组的排序、搜索、填充、复制等常见操作,极大简化了数组处理工作。
核心工具类[编辑 | 编辑源代码]
java.util.Arrays[编辑 | 编辑源代码]
Java中最常用的数组工具类,提供以下功能分组:
功能类别 | 方法示例 | 说明 |
---|---|---|
sort() , parallelSort() | 支持基本类型和对象数组
| ||
binarySearch() | 二分查找(数组需先排序)
| ||
equals() , deepEquals() | 深度比较多维数组
| ||
fill() | 批量初始化数组元素
| ||
asList() , stream() | 数组与集合/流的转换
| ||
copyOf() , copyOfRange() | 安全复制数组
|
java.lang.reflect.Array[编辑 | 编辑源代码]
用于动态创建和访问数组的底层工具类,主要功能包括:
- 动态创建数组:
newInstance()
- 获取数组长度:
getLength()
- 反射方式访问元素:
get()
/set()
主要方法详解[编辑 | 编辑源代码]
数组排序[编辑 | 编辑源代码]
// 基本类型数组排序
int[] numbers = {5, 3, 9, 1};
Arrays.sort(numbers); // 结果为 [1, 3, 5, 9]
// 对象数组排序(需实现Comparable)
String[] words = {"banana", "apple", "pear"};
Arrays.sort(words); // 按字典序排序
// 并行排序(大数据量性能更优)
int[] largeArray = new int[1000000];
Arrays.parallelSort(largeArray);
二分查找[编辑 | 编辑源代码]
页面模块:Message box/ambox.css没有内容。
使用前必须确保数组已排序! |
int[] sorted = {10, 20, 30, 40};
int index = Arrays.binarySearch(sorted, 30); // 返回2
int notFound = Arrays.binarySearch(sorted, 25); // 返回-3(插入点)
数组比较[编辑 | 编辑源代码]
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
int[] c = {1, 3, 2};
System.out.println(Arrays.equals(a, b)); // true
System.out.println(Arrays.equals(a, c)); // false
// 多维数组比较
int[][] matrix1 = {{1,2}, {3,4}};
int[][] matrix2 = {{1,2}, {3,4}};
System.out.println(Arrays.deepEquals(matrix1, matrix2)); // true
数组填充[编辑 | 编辑源代码]
char[] chars = new char[5];
Arrays.fill(chars, 'A'); // ['A', 'A', 'A', 'A', 'A']
// 部分填充
Arrays.fill(chars, 1, 3, 'B'); // ['A', 'B', 'B', 'A', 'A']
高级特性[编辑 | 编辑源代码]
数组转流[编辑 | 编辑源代码]
Java 8+ 支持将数组转为Stream:
String[] languages = {"Java", "Python", "C++"};
long count = Arrays.stream(languages)
.filter(s -> s.startsWith("J"))
.count(); // 结果为1
并行操作[编辑 | 编辑源代码]
示例:
int[] data = new int[10000];
Arrays.parallelSetAll(data, i -> i * 2); // 并行初始化
Arrays.parallelPrefix(data, (a, b) -> a + b); // 并行前缀和
性能考虑[编辑 | 编辑源代码]
sort()
vsparallelSort()
临界点:约个元素System.arraycopy()
比循环复制快3-5倍- 基本类型数组操作比对象数组快约40%
实际应用案例[编辑 | 编辑源代码]
场景:电商系统需要统计每月销售额Top 10商品
class Product {
String name;
double sales;
// 构造方法/getters省略
}
Product[] monthlyProducts = getMonthlyProducts(); // 获取所有商品数据
// 按销售额降序排序
Arrays.sort(monthlyProducts,
(p1, p2) -> Double.compare(p2.getSales(), p1.getSales()));
// 获取前10
Product[] top10 = Arrays.copyOf(monthlyProducts, 10);
// 转换为报表格式
String report = Arrays.stream(top10)
.map(p -> p.getName() + ": " + p.getSales())
.collect(Collectors.joining("\n"));
常见问题[编辑 | 编辑源代码]
最佳实践[编辑 | 编辑源代码]
- 处理大型数组时优先考虑
parallelSort()
- 使用
Arrays.copyOf()
而非手动复制 - 对象数组排序时明确指定Comparator避免
ClassCastException
- 使用
Arrays.stream()
进行现代函数式操作