当前位置: 首页 > news >正文

Java:Arrays类使用

目录

1、主要功能概览

2、基本使用方法

2.1 数组的创建和初始化

2.2 数组排序

2.3 数组搜索

2.4 数组比较

2.5 数组填充

2.6 数组复制

3、高级用法

3.1 使用自定义比较器排序

3.2 数组与集合的转换

3.3 使用Stream处理数组

3.4 并行前缀计算

4、应用示例

4.1 统计考试成绩

4.2 矩阵操作

5、注意事项


1、主要功能概览

Arrays类是Java中用于操作数组的工具类,位于java.util包中。它提供了各种静态方法来操作数组(如排序、搜索、填充、比较等),大大简化了数组操作。

功能类别主要方法
数组转换toString()asList()stream()
数组排序sort()parallelSort()
数组搜索binarySearch()
数组比较equals()deepEquals()
数组填充fill()
数组复制copyOf()copyOfRange()
并行处理parallelPrefix()parallelSetAll()

2、基本使用方法

2.1 数组的创建和初始化

import java.util.Arrays;public class ArraysBasicDemo {public static void main(String[] args) {// 声明和初始化数组int[] numbers = {5, 2, 8, 1, 9};String[] names = {"Alice", "Bob", "Charlie"};System.out.println("原始数组: " + Arrays.toString(numbers));}
}

2.2 数组排序

import java.util.Arrays;public class SortDemo {public static void main(String[] args) {int[] numbers = {5, 2, 8, 1, 9, 3, 7};// 升序排序:sort采用双轴快速排序,在所有数据集上都能提供 O(n log(n)) 的性能Arrays.sort(numbers);System.out.println("升序排序: " + Arrays.toString(numbers));// 部分排序 (对索引1到4的元素排序) :fromIndex包含,toIndex不包含int[] partialArray = {5, 2, 8, 1, 9, 3, 7};Arrays.sort(partialArray, 1, 5);System.out.println("部分排序: " + Arrays.toString(partialArray));// 并行排序 (大数据量时性能更好)int[] largeArray = new int[10000];// 填充随机数Arrays.parallelSetAll(largeArray, i -> (int)(Math.random() * 1000));Arrays.parallelSort(largeArray);System.out.println("前10个元素: " + Arrays.toString(Arrays.copyOf(largeArray, 10)));}
}

2.3 数组搜索

import java.util.Arrays;public class SearchDemo {public static void main(String[] args) {int[] numbers = {1, 3, 5, 7, 9, 11, 13, 15};// 必须先排序才能使用二分查找Arrays.sort(numbers);int key = 7;// 二分查找,返回目标元素的索引,如果不存在则返回 -(插入点) - 1int index = Arrays.binarySearch(numbers, key);if (index >= 0) {System.out.println("元素 " + key + " 找到在索引: " + index);} else {System.out.println("元素 " + key + " 未找到");}// 在指定范围内搜索int rangeIndex = Arrays.binarySearch(numbers, 2, 6, 11);System.out.println("在范围[2,6)内搜索11: 索引=" + rangeIndex);}
}

2.4 数组比较

import java.util.Arrays;public class CompareDemo {public static void main(String[] args) {int[] arr1 = {1, 2, 3};int[] arr2 = {1, 2, 3};int[] arr3 = {1, 2, 4};// 一维数组比较System.out.println("arr1 equals arr2: " + Arrays.equals(arr1, arr2));System.out.println("arr1 equals arr3: " + Arrays.equals(arr1, arr3));// 多维数组比较int[][] multiArr1 = {{1, 2}, {3, 4}};int[][] multiArr2 = {{1, 2}, {3, 4}};int[][] multiArr3 = {{1, 2}, {3, 5}};System.out.println("multiArr1 equals multiArr2: " + Arrays.equals(multiArr1, multiArr2)); // falseSystem.out.println("multiArr1 deepEquals multiArr2: " + Arrays.deepEquals(multiArr1, multiArr2)); // trueSystem.out.println("multiArr1 deepEquals multiArr3: " + Arrays.deepEquals(multiArr1, multiArr3)); // false}
}

2.5 数组填充

import java.util.Arrays;public class FillDemo {public static void main(String[] args) {int[] numbers = new int[5];// 填充整个数组Arrays.fill(numbers, 10);System.out.println("全部填充10: " + Arrays.toString(numbers));// 填充部分数组Arrays.fill(numbers, 1, 4, 5);System.out.println("部分填充5: " + Arrays.toString(numbers));// 使用生成器函数填充int[] generated = new int[5];Arrays.setAll(generated, i -> i * 2);System.out.println("使用生成器填充: " + Arrays.toString(generated));}
}

2.6 数组复制

import java.util.Arrays;public class CopyDemo {public static void main(String[] args) {int[] original = {1, 2, 3, 4, 5};// 复制整个数组int[] copy1 = Arrays.copyOf(original, original.length);System.out.println("完整复制: " + Arrays.toString(copy1));// 复制并扩展长度int[] copy2 = Arrays.copyOf(original, 8);System.out.println("扩展复制: " + Arrays.toString(copy2));// 复制指定范围int[] copy3 = Arrays.copyOfRange(original, 1, 4);System.out.println("范围复制[1,4): " + Arrays.toString(copy3));// 复制并截断int[] copy4 = Arrays.copyOf(original, 3);System.out.println("截断复制: " + Arrays.toString(copy4));}
}

3、高级用法

3.1 使用自定义比较器排序

import java.util.Arrays;
import java.util.Comparator;class Student {String name;int score;Student(String name, int score) {this.name = name;this.score = score;}@Overridepublic String toString() {return name + ":" + score;}
}public class CustomSortDemo {public static void main(String[] args) {Student[] students = {new Student("Alice", 85),new Student("Bob", 92),new Student("Charlie", 78),new Student("Diana", 95)};// 按分数降序排序Arrays.sort(students, new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {return s2.score - s1.score; // 降序}});System.out.println("按分数降序: " + Arrays.toString(students));// 使用Lambda表达式按姓名排序Arrays.sort(students, (s1, s2) -> s1.name.compareTo(s2.name));System.out.println("按姓名排序: " + Arrays.toString(students));}
}

3.2 数组与集合的转换

import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;public class CollectionConversion {public static void main(String[] args) {String[] array = {"Java", "Python", "C++", "JavaScript"};// 数组转List (固定大小)List<String> fixedList = Arrays.asList(array);System.out.println("固定大小List: " + fixedList);// 注意:asList返回的List不能添加/删除元素// fixedList.add("Go"); // 会抛出UnsupportedOperationException// 创建可修改的ListList<String> modifiableList = new ArrayList<>(Arrays.asList(array));modifiableList.add("Go");System.out.println("可修改List: " + modifiableList);// List转数组String[] newArray = modifiableList.toArray(new String[0]);System.out.println("转回数组: " + Arrays.toString(newArray));}
}

3.3 使用Stream处理数组

import java.util.Arrays;
import java.util.stream.IntStream;public class StreamDemo {public static void main(String[] args) {int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 使用Stream处理数组int sum = Arrays.stream(numbers).filter(n -> n % 2 == 0)  // 过滤偶数.map(n -> n * 2)          // 每个元素乘以2.sum();                   // 求和System.out.println("偶数乘以2的和: " + sum);// 创建范围StreamIntStream range = IntStream.range(1, 6); // 1,2,3,4,5System.out.println("范围Stream: " + Arrays.toString(range.toArray()));// 并行处理long count = Arrays.stream(numbers).parallel().filter(n -> n > 5).count();System.out.println("大于5的元素个数: " + count);}
}

3.4 并行前缀计算

import java.util.Arrays;public class ParallelPrefixDemo {public static void main(String[] args) {int[] numbers = {1, 2, 3, 4, 5};// 并行前缀和计算Arrays.parallelPrefix(numbers, (a, b) -> a + b);System.out.println("前缀和: " + Arrays.toString(numbers));// 输出: [1, 3, 6, 10, 15]// 重置数组numbers = new int[]{1, 2, 3, 4, 5};// 并行前缀乘积计算Arrays.parallelPrefix(numbers, (a, b) -> a * b);System.out.println("前缀积: " + Arrays.toString(numbers));// 输出: [1, 2, 6, 24, 120]}
}

4、应用示例

4.1 统计考试成绩

import java.util.Arrays;public class ExamStatistics {public static void main(String[] args) {int[] scores = {85, 92, 78, 96, 88, 72, 95, 81, 89, 94};// 基本统计Arrays.sort(scores);double average = Arrays.stream(scores).average().orElse(0);int max = Arrays.stream(scores).max().orElse(0);int min = Arrays.stream(scores).min().orElse(0);System.out.println("考试成绩统计:");System.out.println("所有成绩: " + Arrays.toString(scores));System.out.println("最高分: " + max);System.out.println("最低分: " + min);System.out.println("平均分: " + average);System.out.println("中位数: " + scores[scores.length / 2]);// 分数段统计long excellent = Arrays.stream(scores).filter(s -> s >= 90).count();long good = Arrays.stream(scores).filter(s -> s >= 80 && s < 90).count();long pass = Arrays.stream(scores).filter(s -> s >= 60 && s < 80).count();System.out.println("\n分数段统计:");System.out.println("优秀(90+): " + excellent);System.out.println("良好(80-89): " + good);System.out.println("及格(60-79): " + pass);}
}

4.2 矩阵操作

import java.util.Arrays;public class MatrixOperations {public static void main(String[] args) {int[][] matrix1 = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};int[][] matrix2 = {{9, 8, 7},{6, 5, 4},{3, 2, 1}};System.out.println("矩阵1:");printMatrix(matrix1);System.out.println("矩阵2:");printMatrix(matrix2);// 矩阵转置int[][] transposed = transpose(matrix1);System.out.println("矩阵1的转置:");printMatrix(transposed);}// 打印矩阵public static void printMatrix(int[][] matrix) {for (int[] row : matrix) {System.out.println(Arrays.toString(row));}}// 矩阵转置public static int[][] transpose(int[][] matrix) {int rows = matrix.length;int cols = matrix[0].length;int[][] result = new int[cols][rows];for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {result[j][i] = matrix[i][j];}}return result;}
}

5、注意事项

  • 数组边界: 使用copyOfRangesort的范围参数时要注意索引边界

  • 空数组: 对空数组操作时要进行空值检查

  • 多维数组: 使用deepToStringdeepEquals处理多维数组

  • 性能考虑: 大数据量时考虑使用并行方法

  • 不可变性Arrays.asList()返回的List大小不可变

http://www.dtcms.com/a/610188.html

相关文章:

  • fineftp-server: 轻量级C++跨平台FTP服务器解决方案
  • Java EE --JUC
  • 如何检测网站开发商留有后门wordpress编辑无效
  • 网站平台建设的实训报告双鸭山网站开发
  • Dart语言之面向对象
  • Ubuntu 22.04双网口同时使用 MID360 雷达与上网的完整指南
  • 广东兰州企业网站排名优化
  • oh my zsh配置
  • 光电对抗——有源干扰:从原理到外场实验(续)
  • nn实践-使用nn搭建一个定时发送天气预报邮件的工作流
  • 网站优化公司方案门户导航网页模板
  • 加强网站建设 提升做网站前台需要什么技能
  • GMI Cloud@AI周报 | Kimi K2-Thinking突袭赶超;OpenAI发布GPT-5.1;豆包编程模型发布
  • 电流检测放大器IC 汽车前装无线充电模块应用 FP130A
  • 扣子——插件问题完整排查报告
  • 网站建设用户登录想招代理去什么网站
  • 广东省备案网站建设方案书外贸做的亚马逊网站是哪个
  • Linux互联网基础
  • 房建设计图网站网站建设目的主要包括哪些
  • 深入理解 Spring Boot 单元测试:从基础到最佳实践
  • react 封装弹框组件 传递数据
  • 宿州做网站安卓系统app
  • 用Maven的quickstart archetype创建项目并结合JUnit5单元测试
  • ELK Stack核心原理与运用要点解析
  • Spring前置准备(九)——Spring中的Bean类加载器
  • TDengine 字符串函数 LTRIM 用户手册
  • 【十一、Linux管理网络安全】
  • 免费的行情软件网站下载不用下载二字顺口名字公司
  • YOLOv5/8/9/10/11/12/13+oc-sort算法实现多目标跟踪
  • Android开发从零开始 - 第一章:Android概述与工程项目结构