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

java学习--Arrays

Java 中的Arrays类,它是java.util包下提供的数组操作工具类,包含了大量静态方法,用于简化数组的排序、查找、填充、复制、比较等常见操作,无需手动编写复杂逻辑,下面按功能分类讲解核心常用方法及使用示例:

一、核心特性

  1. Arrays是工具类,所有方法均为static修饰,直接通过Arrays.方法名()调用,无需创建对象;
  2. 支持所有基本数据类型数组(int[]char[]等)和引用数据类型数组(String[]Object[]等);
  3. 部分方法(如排序、二分查找)对引用数据类型数组支持自定义比较器(JDK 8+)。

二、常用方法分类详解

1. 数组排序:sort()

用于对数组进行升序排序(默认),支持基本类型数组和引用类型数组,引用类型数组默认按自然顺序排序。

(1)基本类型数组排序
import java.util.Arrays; public class ArraysDemo { public static void main(String[] args) { // int 数组排序 int[] intArr = {3, 1, 4, 1, 5, 9}; Arrays.sort(intArr); System.out.println("int 数组升序排序:" + Arrays.toString(intArr)); // 输出:[1, 1, 3, 4, 5, 9] // char 数组排序 char[] charArr = {'c', 'a', 'b', 'z'}; Arrays.sort(charArr); System.out.println("char 数组升序排序:" + Arrays.toString(charArr)); // 输出:[a, b, c, z] } }
(2)指定范围排序

sort(int[] a, int fromIndex, int toIndex):对数组从fromIndex(包含)到toIndex(不包含)的区间进行排序。

int[] arr = {9, 8, 7, 6, 5, 4}; Arrays.sort(arr, 1, 4); // 排序索引 1~3 的元素 System.out.println("指定范围排序:" + Arrays.toString(arr)); // 输出:[9, 6, 7, 8, 5, 4]
(3)引用类型数组排序(自定义比较器,JDK 8+)

通过Comparator实现自定义排序规则(如降序、按字符串长度排序)。

// String 数组按长度降序排序 String[] strArr = {"Java", "Python", "C", "JavaScript"}; Arrays.sort(strArr, (s1, s2) -> s2.length() - s1.length()); System.out.println("按字符串长度降序:" + Arrays.toString(strArr)); // 输出:[JavaScript, Python, Java, C] // Integer 数组降序排序 Integer[] integerArr = {3, 1, 4, 2}; Arrays.sort(integerArr, (a, b) -> b - a); System.out.println("Integer 数组降序:" + Arrays.toString(integerArr)); // 输出:[4, 3, 2, 1]

2. 数组查找:binarySearch()

基于二分查找算法查找指定元素在数组中的索引,注意:使用前必须先对数组进行排序,否则结果不确定。

(1)基本用法
int[] arr = {1, 3, 5, 7, 9}; // 1. 查找存在的元素 int index1 = Arrays.binarySearch(arr, 5); System.out.println("元素 5 的索引:" + index1); // 输出:2 // 2. 查找不存在的元素 // 返回值规则:-(插入点) - 1,插入点是元素应该插入的位置(保持数组有序) int index2 = Arrays.binarySearch(arr, 6); System.out.println("元素 6 的索引(不存在):" + index2); // 输出:-4(插入点为 3,-(3)-1=-4)
(2)指定范围查找

binarySearch(int[] a, int fromIndex, int toIndex, int key):在指定区间内查找元素。

int[] arr = {1, 3, 5, 7, 9}; int index = Arrays.binarySearch(arr, 1, 4, 7); // 在索引 1~3 区间查找 7 System.out.println("指定范围查找 7 的索引:" + index); // 输出:3

3. 数组转换为字符串:toString()

将数组转换为友好的字符串格式([元素1, 元素2, ...]),方便打印输出,避免直接打印数组得到内存地址。

// 基本类型数组 int[] intArr = {1, 2, 3}; System.out.println("int 数组字符串:" + Arrays.toString(intArr)); // 输出:[1, 2, 3] // 引用类型数组 String[] strArr = {"Java", "Arrays"}; System.out.println("String 数组字符串:" + Arrays.toString(strArr)); // 输出:[Java, Arrays] // 二维数组(使用 deepToString()) int[][] twoDArr = {{1, 2}, {3, 4}}; System.out.println("二维数组字符串:" + Arrays.deepToString(twoDArr)); // 输出:[[1, 2], [3, 4]]

注意:一维数组用toString(),多维数组用deepToString(),否则多维数组会打印出子数组的内存地址。

4. 数组填充:fill()

将指定值填充到数组的全部元素或指定区间的元素中,用于快速初始化数组。

(1)填充全部元素
int[] arr = new int[5]; Arrays.fill(arr, 10); // 将所有元素填充为 10 System.out.println("全部填充 10:" + Arrays.toString(arr)); // 输出:[10, 10, 10, 10, 10]
(2)填充指定区间元素

fill(int[] a, int fromIndex, int toIndex, int val):填充从fromIndex(包含)到toIndex(不包含)的元素。

int[] arr = new int[5]; Arrays.fill(arr, 1, 4, 20); // 填充索引 1~3 的元素为 20 System.out.println("指定区间填充 20:" + Arrays.toString(arr)); // 输出:[0, 20, 20, 20, 0]

5. 数组复制:copyOf()&copyOfRange()

用于快速复制数组,避免手动使用循环复制,效率更高。

(1)copyOf():复制数组的前 N 个元素(或扩容 / 缩容数组)
int[] srcArr = {1, 2, 3, 4, 5}; // 1. 复制前 3 个元素 int[] copy1 = Arrays.copyOf(srcArr, 3); System.out.println("复制前 3 个元素:" + Arrays.toString(copy1)); // 输出:[1, 2, 3] // 2. 扩容数组(长度大于原数组,多余元素用默认值填充) int[] copy2 = Arrays.copyOf(srcArr, 8); System.out.println("扩容数组:" + Arrays.toString(copy2)); // 输出:[1, 2, 3, 4, 5, 0, 0, 0] // 3. 缩容数组(长度小于原数组,截取前 N 个元素) int[] copy3 = Arrays.copyOf(srcArr, 2); System.out.println("缩容数组:" + Arrays.toString(copy3)); // 输出:[1, 2]
(2)copyOfRange():复制指定区间的元素
int[] srcArr = {1, 2, 3, 4, 5}; // 复制索引 1~3 的元素(fromIndex 包含,toIndex 不包含) int[] copyRange = Arrays.copyOfRange(srcArr, 1, 4); System.out.println("复制指定区间元素:" + Arrays.toString(copyRange)); // 输出:[2, 3, 4]

6. 数组比较:equals()&deepEquals()

用于比较两个数组是否相等(元素数量相同、对应位置元素也相同)。

(1)equals():比较一维数组
int[] arr1 = {1, 2, 3}; int[] arr2 = {1, 2, 3}; int[] arr3 = {1, 3, 2}; System.out.println("arr1 与 arr2 相等:" + Arrays.equals(arr1, arr2)); // 输出:true System.out.println("arr1 与 arr3 相等:" + Arrays.equals(arr1, arr3)); // 输出:false
(2)deepEquals():比较多维数组
int[][] twoDArr1 = {{1, 2}, {3, 4}}; int[][] twoDArr2 = {{1, 2}, {3, 4}}; int[][] twoDArr3 = {{1, 3}, {2, 4}}; System.out.println("二维数组 twoDArr1 与 twoDArr2 相等:" + Arrays.deepEquals(twoDArr1, twoDArr2)); // 输出:true System.out.println("二维数组 twoDArr1 与 twoDArr3 相等:" + Arrays.deepEquals(twoDArr1, twoDArr3)); // 输出:false

注意:==比较的是数组的内存地址,Arrays.equals()/deepEquals()比较的是数组的元素内容。

7. 数组转集合:asList()

将数组转换为List集合(注意:返回的是固定大小的ArrayList,不能添加 / 删除元素)。

// 基本类型数组转换(注意:需使用包装类数组,否则会将整个数组作为一个元素) Integer[] intArr = {1, 2, 3}; List<Integer> list1 = Arrays.asList(intArr); System.out.println("包装类数组转 List:" + list1); // 输出:[1, 2, 3] // 引用类型数组转换 String[] strArr = {"Java", "Arrays"}; List<String> list2 = Arrays.asList(strArr); System.out.println("String 数组转 List:" + list2); // 输出:[Java, Arrays] // 错误示例:基本类型数组直接转换 int[] primitiveArr = {1, 2, 3}; List<int[]> list3 = Arrays.asList(primitiveArr); System.out.println("基本类型数组错误转换:" + list3); // 输出:[[I@xxxxxx](数组作为单个元素)

注意:若需要可修改的 List,可通过new ArrayList<>(Arrays.asList(arr))包装。

三、完整使用示例

import java.util.Arrays; import java.util.Comparator; import java.util.List; public class ArraysCompleteDemo { public static void main(String[] args) { // 1. 数组初始化 int[] baseArr = {5, 2, 9, 1, 5, 6}; System.out.println("原始数组:" + Arrays.toString(baseArr)); // 2. 排序 Arrays.sort(baseArr); System.out.println("升序排序后:" + Arrays.toString(baseArr)); // 3. 二分查找 int target = 5; int index = Arrays.binarySearch(baseArr, target); System.out.println("元素 " + target + " 的索引:" + index); // 4. 数组复制 int[] copyArr = Arrays.copyOf(baseArr, 4); System.out.println("复制前 4 个元素:" + Arrays.toString(copyArr)); // 5. 数组填充 int[] fillArr = new int[5]; Arrays.fill(fillArr, 1, 4, 8); System.out.println("指定区间填充 8:" + Arrays.toString(fillArr)); // 6. 数组比较 int[] compareArr1 = {1, 2, 5, 5}; int[] compareArr2 = {1, 2, 5, 5}; System.out.println("两个数组是否相等:" + Arrays.equals(compareArr1, compareArr2)); // 7. 多维数组操作 int[][] twoDArr = {{3, 1}, {2, 4}}; System.out.println("二维数组原始格式:" + Arrays.deepToString(twoDArr)); // 二维数组排序(每行排序) for (int[] subArr : twoDArr) { Arrays.sort(subArr); } System.out.println("二维数组每行排序后:" + Arrays.deepToString(twoDArr)); // 8. 数组转 List String[] strArr = {"Spring", "Boot", "Java"}; List<String> strList = Arrays.asList(strArr); System.out.println("数组转 List:" + strList); } }

运行结果:

原始数组:[5, 2, 9, 1, 5, 6] 升序排序后:[1, 2, 5, 5, 6, 9] 元素 5 的索引:2 复制前 4 个元素:[1, 2, 5, 5] 指定区间填充 8:[0, 8, 8, 8, 0] 两个数组是否相等:true 二维数组原始格式:[[3, 1], [2, 4]] 二维数组每行排序后:[[1, 3], [2, 4]] 数组转 List:[Spring, Boot, Java]

四、核心总结

  1. Arraysjava.util包下的静态工具类,所有方法直接通过Arrays.方法名()调用;
  2. 核心功能分类:
    • 排序:sort()(默认升序,支持自定义比较器);
    • 查找:binarySearch()(需先排序,基于二分查找);
    • 格式化:toString()(一维数组)、deepToString()(多维数组);
    • 填充:fill()(快速初始化数组元素);
    • 复制:copyOf()(复制前 N 个)、copyOfRange()(复制指定区间);
    • 比较:equals()(一维数组)、deepEquals()(多维数组);
    • 转集合:asList()(返回固定大小 List);
  3. 注意事项:
    • 二分查找前必须排序,否则结果无效;
    • 多维数组需使用deepToString()/deepEquals()
    • asList()返回的 List 不支持add()/remove()操作。

http://www.jsqmd.com/news/128079/

相关文章:

  • es6 函数命名的规范建议:新手教程指导
  • Mac鼠标滚动终极优化:打造个性化流畅体验的完整方案
  • PPTist:现代化在线演示文稿开发框架深度解析
  • VMware Unlocker完全指南:3步在普通PC运行macOS
  • 2025年终园林休闲椅/垃圾桶/花箱优质厂家权威分析报告 - 深度智识库
  • ComfyUI-WanVideoWrapper终极指南:5分钟快速上手AI视频增强
  • 2025年评价高的企业礼品纸杯行业内知名厂家推荐 - 行业平台推荐
  • 高效获取电子教材:智慧教育平台资源下载完整教程
  • 基于单片机的智能停车场系统设计(有完整资料)
  • 西安交通大学LaTeX学位论文模板终极使用指南:快速掌握专业排版技巧
  • 国家中小学智慧教育平台电子课本下载工具完整使用指南
  • LeRobot开源生态终极指南:从用户到核心贡献者的完整路径
  • LeRobot故障排除:5分钟快速定位机器人异常
  • Revit模型Web可视化:5分钟掌握Revit2GLTF完整方案
  • ImageToSTL终极教程:零基础快速将照片变3D打印模型
  • Vue2后台管理系统:10分钟搭建专业级企业数据管理平台
  • 基于单片机的物流分拣系统设计(有完整资料)
  • Geo优化逻辑的深度剖析:从AI采信到人性化驱动的新范式
  • LeRobot机器人控制:5分钟从零搭建你的第一个AI机械臂
  • 终极指南:3步完成m3u8-downloader服务端Docker部署
  • 动漫场景搜索算法优化:5大核心技术突破与实战应用
  • 面对市场竞争加剧,地方政府如何通过数字化升级路线图实现产业集聚度与对外辐射力?
  • trace.moe动漫场景搜索多语言部署完全指南
  • 告别手动保存!这款Python图片批量下载神器让你效率翻倍
  • Open-AutoGLM APIKey购买内幕(仅限内部人员透露的申请通道)
  • 无需GPU编程经验!使用anything-llm镜像快速启动AI服务
  • Image-Downloader:解放双手的智能图片批量下载神器
  • 终极指南:3步搞定QQ音乐批量解析下载
  • 破壁创新孤岛:知识图谱驱动技术转移新范式
  • 如何快速解锁国家中小学智慧教育平台电子课本:新手进阶完整攻略