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

Java-Arrays工具类:基础到进阶的数组操作全面指南

Arrays工具类常用方法详解

  • 前言
  • 一、数组的排序
    • 1.1 基本类型数组排序
    • 1.2 对象数组排序
    • 1.3 自定义排序规则
  • 二、数组的搜索
    • 2.1 二分查找法
  • 三、数组的填充
    • 3.1 填充固定值
    • 3.2 部分填充
  • 四、数组的填充
  • 五、数组的复制
    • 5.1 复制整个数组
    • 5.2 复制部分数组
  • 六、数组的比较
    • 6.1 元素内容比较
    • 6.2 深度比较
  • 七、数组转字符串
  • 八、数组转流
  • 总结

前言

数组是一种常用的数据结构, 为了方便对数组进行操作,Java 提供了Arrays工具类,它包含了一系列静态方法,用于数组的排序、搜索、填充、比较等操作。本文我将详细介绍Arrays工具类的常用方法,并通过丰富的示例代码帮助你掌握这些方法的使用技巧。

一、数组的排序

1.1 基本类型数组排序

Arrays.sort()方法可以对基本类型的数组进行升序排序。例如,对整型数组进行排序:

import java.util.Arrays;public class SortExample {public static void main(String[] args) {int[] arr = {5, 2, 8, 1, 9};Arrays.sort(arr);System.out.println(Arrays.toString(arr)); // 输出:[1, 2, 5, 8, 9]}
}

对于其他基本类型(如doublechar等)的数组,使用方法类似。

1.2 对象数组排序

如果要对对象数组进行排序,需要确保对象的类实现了Comparable接口,并重写compareTo()方法。例如,对自定义的Student类对象数组进行排序:

import java.util.Arrays;class Student implements Comparable<Student> {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic int compareTo(Student other) {return this.age - other.age; // 按年龄升序排序}@Overridepublic String toString() {return "Student{name='" + name + "', age=" + age + "}";}
}public class SortObjectExample {public static void main(String[] args) {Student[] students = {new Student("Alice", 20),new Student("Bob", 18),new Student("Charlie", 22)};Arrays.sort(students);System.out.println(Arrays.toString(students));// 输出:[Student{name='Bob', age=18}, Student{name='Alice', age=20}, Student{name='Charlie', age=22}]}
}

1.3 自定义排序规则

如果不想按照对象类默认的排序规则排序,可以使用Arrays.sort()的重载方法,传入一个Comparator对象。例如,按学生姓名的长度降序排序:

import java.util.Arrays;
import java.util.Comparator;public class CustomSortExample {public static void main(String[] args) {Student[] students = {new Student("Alice", 20),new Student("Bob", 18),new Student("Charlie", 22)};Arrays.sort(students, Comparator.comparingInt(s -> -s.getName().length()));System.out.println(Arrays.toString(students));// 输出:[Student{name='Charlie', age=22}, Student{name='Alice', age=20}, Student{name='Bob', age=18}]}
}

二、数组的搜索

2.1 二分查找法

Arrays.binarySearch()方法使用二分查找法在已排序的数组中查找指定元素。如果找到,返回元素的索引;否则返回一个负值。例如:

import java.util.Arrays;public class BinarySearchExample {public static void main(String[] args) {int[] arr = {1, 3, 5, 7, 9};int index = Arrays.binarySearch(arr, 5);System.out.println("元素5的索引是:" + index); // 输出:2}
}

使用二分查找法前必须确保数组已经排序,否则结果不确定。

三、数组的填充

3.1 填充固定值

Arrays.fill()方法可以将数组的所有元素填充为指定的值。例如:

import java.util.Arrays;public class FillExample {public static void main(String[] args) {int[] arr = new int[5];Arrays.fill(arr, 10);System.out.println(Arrays.toString(arr)); // 输出:[10, 10, 10, 10, 10]}
}

3.2 部分填充

Arrays.fill()的重载方法可以指定填充的起始位置和结束位置(不包含结束位置)。例如:

import java.util.Arrays;public class PartialFillExample {public static void main(String[] args) {int[] arr = new int[5];Arrays.fill(arr, 1, 4, 20);System.out.println(Arrays.toString(arr)); // 输出:[0, 20, 20, 20, 0]}
}

四、数组的填充

Arrays.fill()方法可以将数组的所有元素填充为指定的值。例如:

import java.util.Arrays;public class FillExample {public static void main(String[] args) {int[] arr = new int[5];Arrays.fill(arr, 10);System.out.println(Arrays.toString(arr)); // 输出:[10, 10, 10, 10, 10]}
}

五、数组的复制

5.1 复制整个数组

Arrays.copyOf()方法可以复制整个数组,并返回一个新数组。例如:

import java.util.Arrays;public class CopyOfExample {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};int[] newArr = Arrays.copyOf(arr, arr.length);System.out.println(Arrays.toString(newArr)); // 输出:[1, 2, 3, 4, 5]}
}

5.2 复制部分数组

Arrays.copyOfRange()方法可以复制数组的指定范围。例如:

import java.util.Arrays;public class CopyOfRangeExample {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};int[] newArr = Arrays.copyOfRange(arr, 1, 4);System.out.println(Arrays.toString(newArr)); // 输出:[2, 3, 4]}
}

六、数组的比较

6.1 元素内容比较

Arrays.equals()方法可以比较两个数组的元素内容是否相等。例如:

import java.util.Arrays;public class EqualsExample {public static void main(String[] args) {int[] arr1 = {1, 2, 3};int[] arr2 = {1, 2, 3};int[] arr3 = {3, 2, 1};System.out.println(Arrays.equals(arr1, arr2)); // 输出:trueSystem.out.println(Arrays.equals(arr1, arr3)); // 输出:false}
}

6.2 深度比较

对于多维数组,可以使用Arrays.deepEquals()方法进行深度比较。例如:

import java.util.Arrays;public class DeepEqualsExample {public static void main(String[] args) {int[][] arr1 = {{1, 2}, {3, 4}};int[][] arr2 = {{1, 2}, {3, 4}};System.out.println(Arrays.deepEquals(arr1, arr2)); // 输出:true}
}

七、数组转字符串

Arrays.toString()方法可以将数组转换为字符串,方便打印输出。例如:

import java.util.Arrays;public class ToStringExample {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};System.out.println(Arrays.toString(arr)); // 输出:[1, 2, 3, 4, 5]}
}

对于多维数组,可以使用Arrays.deepToString()方法。例如:

import java.util.Arrays;public class DeepToStringExample {public static void main(String[] args) {int[][] arr = {{1, 2}, {3, 4}};System.out.println(Arrays.deepToString(arr)); // 输出:[[1, 2], [3, 4]]}
}

八、数组转流

Java 8 引入了 Stream API,Arrays.stream()方法可以将数组转换为流,方便进行各种操作。例如:

import java.util.Arrays;public class StreamExample {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};int sum = Arrays.stream(arr).sum();System.out.println("数组元素的和:" + sum); // 输出:15}
}

总结

Arrays工具类提供了丰富的方法来操作数组,包括排序、搜索、填充、复制、比较等。掌握这些方法可以大大提高数组操作的效率和代码的可读性。在实际开发中,根据具体需求选择合适的方法,可以让你的代码更加简洁、高效, 希望本文的内容对你理解和使用Arrays工具类有所帮助。

后续我也将分享更多Java相关的小知识, 不要错过哦~~
若这篇内容帮到你,动动手指支持下!关注不迷路,干货持续输出!
ヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノ

http://www.xdnf.cn/news/400861.html

相关文章:

  • 14B检索能力超过Google Search,阿里ZeroSearch通过RL激发LLM检索推理能力~
  • MFC listctrl修改背景颜色
  • 【文心智能体】使用文心一言来给智能体设计一段稳定调用工作流的提示词
  • 解决LangChain4j报错HTTP/1.1 header parser received no bytes
  • 精益数据分析(56/126):创业阶段的划分与精益数据分析实践
  • ElasticSearch聚合操作案例
  • Oracle adg环境下调整redo日志组以及standby日志组大小
  • CSDN博客粘贴图片失败如何解决
  • 佰力博科技与您探讨阻抗谱测量的基本原理和测量方法
  • 【言语】刷题2
  • Qt5.14.2 链接 MySQL 8.4 遇到的问题
  • 第三方软件测评中心分享:软件功能测试类型和测试工具
  • 动手学深度学习12.4.硬件-笔记练习(PyTorch)
  • # 实时英文 OCR 文字识别:从摄像头到 PyQt5 界面的实现
  • python 的 ​uv、pip​ 和 ​conda​ 对比和技术选型
  • 安卓玩机工具-----安卓机型一款很好用的数据备份恢复软件 支持云端备份
  • C#中SetProperty方法使用
  • Qt进阶开发:QTcpServer的的详解
  • 对抗进行性核上性麻痹,健康护理筑牢生活防线
  • Golang 应用的 CI/CD 与 K8S 自动化部署全流程指南
  • 深度拆解!MES如何重构生产计划与排产调度全流程?
  • 【软件工程】软件缺陷 基于组合的优化方法
  • 获取高德地图JS API的安全密钥和Key的方法
  • HBase进阶之路:从原理到实战的深度探索
  • 1.6 偏导数
  • Ollama+OpenWebUI+docker附带软件下载链接,配置流程,适合内网部署,可以多人内网使用
  • CSS3(BFC)
  • 智能家居“心脏“升级战:GD25Q127CSIG国产芯片如何重构家庭物联生态
  • Lodash isEqual 方法源码实现分析
  • 企业级商城系统容器化部署技术方案