跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Java数组工具类
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{Note|本节内容适用于Java 8及以上版本,部分特性可能需要更高版本支持。}} = Java数组工具类 = '''Java数组工具类'''(Java Array Utilities)是指Java标准库中提供的用于操作数组的工具类集合,主要包括<code>java.util.Arrays</code>和<code>java.lang.reflect.Array</code>。这些类提供了静态方法来实现数组的排序、搜索、填充、复制等常见操作,极大简化了数组处理工作。 == 核心工具类 == === java.util.Arrays === Java中最常用的数组工具类,提供以下功能分组: {| class="wikitable" ! 功能类别 !! 方法示例 !! 说明 |- | 排序 | <code>sort()</code>, <code>parallelSort()</code> | 支持基本类型和对象数组 |- | 搜索 | <code>binarySearch()</code> | 二分查找(数组需先排序) |- | 比较 | <code>equals()</code>, <code>deepEquals()</code> | 深度比较多维数组 |- | 填充 | <code>fill()</code> | 批量初始化数组元素 |- | 转换 | <code>asList()</code>, <code>stream()</code> | 数组与集合/流的转换 |- | 复制 | <code>copyOf()</code>, <code>copyOfRange()</code> | 安全复制数组 |} === java.lang.reflect.Array === 用于动态创建和访问数组的底层工具类,主要功能包括: * 动态创建数组:<code>newInstance()</code> * 获取数组长度:<code>getLength()</code> * 反射方式访问元素:<code>get()</code>/<code>set()</code> == 主要方法详解 == === 数组排序 === <syntaxhighlight lang="java"> // 基本类型数组排序 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); </syntaxhighlight> === 二分查找 === {{Warning|使用前必须确保数组已排序!}} <syntaxhighlight lang="java"> int[] sorted = {10, 20, 30, 40}; int index = Arrays.binarySearch(sorted, 30); // 返回2 int notFound = Arrays.binarySearch(sorted, 25); // 返回-3(插入点) </syntaxhighlight> === 数组比较 === <syntaxhighlight lang="java"> 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 </syntaxhighlight> === 数组填充 === <syntaxhighlight lang="java"> 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'] </syntaxhighlight> == 高级特性 == === 数组转流 === Java 8+ 支持将数组转为Stream: <syntaxhighlight lang="java"> String[] languages = {"Java", "Python", "C++"}; long count = Arrays.stream(languages) .filter(s -> s.startsWith("J")) .count(); // 结果为1 </syntaxhighlight> === 并行操作 === <mermaid> graph LR A[原始数组] --> B[分割] B --> C[子数组1] B --> D[子数组2] B --> E[子数组n] C --> F[并行处理] D --> F E --> F F --> G[合并结果] </mermaid> 示例: <syntaxhighlight lang="java"> int[] data = new int[10000]; Arrays.parallelSetAll(data, i -> i * 2); // 并行初始化 Arrays.parallelPrefix(data, (a, b) -> a + b); // 并行前缀和 </syntaxhighlight> == 性能考虑 == * <code>sort()</code> vs <code>parallelSort()</code>临界点:约<math>2^{13}</math>个元素 * <code>System.arraycopy()</code>比循环复制快3-5倍 * 基本类型数组操作比对象数组快约40% == 实际应用案例 == '''场景:'''电商系统需要统计每月销售额Top 10商品 <syntaxhighlight lang="java"> 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")); </syntaxhighlight> == 常见问题 == {{Q&A |问题 = 为什么Arrays.asList()返回的列表不能修改? |答案 = 因为返回的是基于原始数组的固定大小视图,要创建可变列表应使用:<br><code>new ArrayList<>(Arrays.asList(array))</code> }} {{Q&A |问题 = 如何打印多维数组内容? |答案 = 使用<code>Arrays.deepToString()</code>方法:<br><code>System.out.println(Arrays.deepToString(matrix))</code> }} == 最佳实践 == # 处理大型数组时优先考虑<code>parallelSort()</code> # 使用<code>Arrays.copyOf()</code>而非手动复制 # 对象数组排序时明确指定Comparator避免<code>ClassCastException</code> # 使用<code>Arrays.stream()</code>进行现代函数式操作 [[Category:Java编程]] [[Category:Java数组]] [[Category:编程语言]] [[Category:Java]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:Mbox
(
编辑
)
模板:Note
(
编辑
)
模板:Q&A
(
编辑
)
模板:Warning
(
编辑
)
模块:Arguments
(
编辑
)
模块:Message box
(
编辑
)
模块:Message box/ambox.css
(
编辑
)
模块:Message box/configuration
(
编辑
)
模块:Yesno
(
编辑
)