Arrays工具类详解

目录

1. Arrays.toString() 方法

2. Arrays.deepToString() 方法

3. Arrays.equals(int[ ] arr1, int[ ] arr2) 方法

4. Arrays.equals(Object[] arr1, Object[] arr2) 方法

5. Arrays.deepEquals(Object[] arr1, Object[] arr2) 方法

6. Arrays.sort(int[] arr) 方法

7. Arrays.sort(String[] arr) 方法

8. Arrays.parallelSort(int[] arr) 方法

9. Arrays.binarySearch(int[] arr, int elt) 方法

10. Arrays.fill(int[] arr, int data) 方法

11. Arrays.fill(int[] a, int fromIndex, int toIndex, int val) 方法

12. Arrays.copyOf(int[] original, int newLength) 方法

13. Arrays.copyOfRange(int[] original, int from, int to) 方法

14. Arrays.asList(T... data) 方法


1. Arrays.toString() 方法

该方法用于将数组转换成字符串,方便打印数组内容。

import java.util.Arrays;public class Main {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};String str = Arrays.toString(arr);System.out.println(arr);  //调用的是 Object 类的 toString 方法System.out.println(str); // 输出: [1, 2, 3, 4, 5]}
}

运行结果:


2. Arrays.deepToString() 方法

此方法可以将二维数组转换成字符串,能递归处理多维数组。

适合于二维数组以及多维数组的。

import org.junit.jupiter.api.Test;import java.util.Arrays;public class ArrayToStringTest {/*** Arrays.deepToString()作用是:适合于将多维数组转换成字符串。*/@Testpublic void testDeepToString() {// 适合于二维数组以及多维数组的。int[][] arr = {{12, 2, 3, 3},{4, 45, 5, 5},{1, 1, 1, 1, 1, 1}};// 使用Arrays.toString()方法打印二维数组System.out.println(Arrays.toString(arr)); // [[I@641147d0, [I@6e38921c, [I@64d7f7e0]// 使用Arrays.deepToString()方法打印二维数组System.out.println(Arrays.deepToString(arr)); // [[12, 2, 3, 3], [4, 45, 5, 5], [1, 1, 1, 1, 1, 1]]}
}

这段 Java 代码主要展示了Arrays.toString()Arrays.deepToString()方法在处理多维数组时的不同表现。具体来说:

  • Arrays.toString()方法用于将一维数组转换为字符串形式,但当用于多维数组时,它只会打印出数组元素的内存地址。
  • Arrays.deepToString()方法专门用于将多维数组(包括二维数组及更高维度)转换为易于阅读的字符串形式,它会递归地遍历数组的每个元素并将其值输出。

运行结果:

以下是一个三维数组的示例,展示了Arrays.deepToString()方法在处理更高维度数组时的效果:

import java.util.Arrays;public class ArrayDeepToStringExample {public static void main(String[] args) {int[][][] threeDArray = {{{1, 2},{3, 4}},{{5, 6},{7, 8}}};System.out.println(Arrays.deepToString(threeDArray));}
}

运行结果:

3. Arrays.equals(int[ ] arr1, int[ ] arr2) 方法

用于判断两个一维 int 数组是否相等,即数组长度和对应位置元素都相同。

import java.util.Arrays;public class ArraysEqualsExample {public static void main(String[] args) {int[] arr1 = {1, 2, 3};int[] arr2 = {1, 2, 3};boolean isEqual = Arrays.equals(arr1, arr2);System.out.println(isEqual); // 输出: trueString[] names1 = new String[]{"abc", "def", "xyz"};String[] names2 = new String[]{"abc", "def", "xyz"};System.out.println(Arrays.equals(names1, names2));}
}

运行结果:


4. Arrays.equals(Object[] arr1, Object[] arr2) 方法

判断两个 Object 类型的一维数组是否相等。

import java.util.Arrays;public class ArraysEqualsObjectExample {public static void main(String[] args) {Object[] arr1 = {"a", "b", "c"};Object[] arr2 = {"a", "b", "c"};boolean isEqual = Arrays.equals(arr1, arr2);System.out.println(isEqual); // 输出: true}
}

5. Arrays.deepEquals(Object[] arr1, Object[] arr2) 方法

判断两个二维 Object 数组是否相等,会递归比较数组元素。

import java.util.Arrays;public class ArraysDeepEqualsExample {public static void main(String[] args) {Object[][] arr1 = {{"a", "b"}, {"c", "d"}};Object[][] arr2 = {{"a", "b"}, {"c", "d"}};boolean isEqual = Arrays.deepEquals(arr1, arr2);System.out.println(isEqual); // 输出: true}
}

6. Arrays.sort(int[] arr) 方法

基于快速排序算法,对一维 int 数组进行排序,适合小型数据量排序。

 @Testpublic void testSort(){int[] arr = {1,3,45,5,6,7,87,8};Arrays.sort(arr);System.out.println(Arrays.toString(arr));String[] strs = {"a", "ac", "ab", "b"};// 应该是根据字典的顺序排序的。Arrays.sort(strs);System.out.println(Arrays.toString(strs));}

运行结果:

注意点:能不能对Person数组排序

示例:

person类:

public class Person {private int age;private String name;public Person() {}public Person(int age) {this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"age=" + age +'}';}
}

测试类Test1:

import org.junit.jupiter.api.Test;import java.util.Arrays;public class Test1 {@Testpublic void testSort(){// 能不能对Person数组排序Person p1 = new Person(20);Person p2 = new Person(22);Person p3 = new Person(19);Person p4 = new Person(18);/*java.lang.ClassCastException: class com.powernode.javase.Person cannot be cast to class java.lang.Comparable猜测,底层一定有这样一行代码:Comparable c = (Comparable)p1; 为什么会报这样的错误呢?也进一步说明了我们的Person类不是可比较的。Comparable字面意思:可比较的。*/Person[] persons = {p1, p2, p3, p4};// 排序Arrays.sort(persons);System.out.println(Arrays.toString(persons));}
}

运行结果:

解释:

代码在执行 Arrays.sort(persons) 时会抛出 ClassCastException,这是因为 Arrays.sort() 方法在对数组进行排序时,要求数组中的元素必须实现 java.lang.Comparable 接口,而定义的 Person 类并没有实现这个接口,所以无法进行比较和排序。

解决方案

要解决这个问题,需要让 Person实现 Comparable 接口并且实现 compareTo() 方法来定义 Person 对象之间的比较规则。

凡事自定义的类型要做比较的话,这个自定义类型必须实现一个接口:Comparable接口,并且实现compareTo方法,在这个方法中编写比较规则。

person类:


public class Person implements Comparable{private int age;private String name;public Person() {}public Person(int age) {this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"age=" + age +'}';}@Override// 重写 Comparable 接口中的 compareTo 方法,用于定义 Person 对象之间的比较规则public int compareTo(Object o) {// 编写比较规则。// 根据年龄进行比较// p1.compareTo(p2) p1和p2之间进行比较。// this是p1// o是p2// 当前对象的年龄//this.age;// 另一个对象的年龄Person person = (Person) o;//把传入的 Object 类型的对象 o 强制转换为 Person 类型//person.age;// 按照年龄进行比较。// 这里采用减法运算来比较当前对象(this)和另一个对象(person)的年龄// 如果当前对象的年龄小于另一个对象的年龄,返回负数// 如果当前对象的年龄等于另一个对象的年龄,返回 0// 如果当前对象的年龄大于另一个对象的年龄,返回正数return this.age - person.age;//升序// 若要按照降序排列(年龄大的在前),可使用以下代码//return person.age - this.age;//降序// 按照字符串进行比较。// 升序// 若要按照姓名进行升序排列,可使用以下代码//return this.name.compareTo(person.name);// 降序// 若要按照姓名进行降序排列,可使用以下代码//return person.name.compareTo(this.name);}}

测试类Test1:

import org.junit.jupiter.api.Test;import java.util.Arrays;public class Test1 {@Testpublic void testSort(){// 能不能对Person数组排序Person p1 = new Person(20);Person p2 = new Person(22);Person p3 = new Person(19);Person p4 = new Person(18);/*java.lang.ClassCastException: class com.powernode.javase.Person cannot be cast to class java.lang.Comparable猜测,底层一定有这样一行代码:Comparable c = (Comparable)p1; 为什么会报这样的错误呢?也进一步说明了我们的Person类不是可比较的。Comparable字面意思:可比较的。*/Person[] persons = {p1, p2, p3, p4};// 排序Arrays.sort(persons);System.out.println(Arrays.toString(persons));}
}

注意:

字符串实现了Comparable的接口,字符串本身就是可比较的

运行结果:

  • 类型转换:把传入的 Object 类型的对象 o 强制转换为 Person 类型,以便能访问 Person 类的属性(如 agename)。
  • 年龄比较:通过 this.age - otherPerson.age 来比较两个 Person 对象的年龄。此操作会根据年龄大小返回相应的整数值,从而确定对象的顺序。
  • 其他排序规则示例:代码中还给出了按照姓名升序和降序排列的示例,可根据实际需求进行选择。

7. Arrays.sort(String[] arr) 方法

对一维 String 数组进行排序,按照字典序排序。

import java.util.Arrays;public class ArraysSortStringExample {public static void main(String[] args) {String[] arr = {"banana", "apple", "cherry"};Arrays.sort(arr);System.out.println(Arrays.toString(arr)); // 输出: [apple, banana, cherry]}
}

8. Arrays.parallelSort(int[] arr) 方法

基于分治的归并排序算法,支持多核 CPU 排序,适合大数据量排序

   /*** 启用多核CPU并行排序。* 首先你的电脑是支持多核的。* 注意:数据量太小的话,不要调用这个方法,因为启动多核也是需要耗费资源的。* Java8引入的方法。* 数据量较大的时候,建议使用这个方法效率比较高。** 通过源码分析:如果超过4096个长度,则会启用多核。* 4096以内就自动调用sort方法就行了。*/@Testpublic void testParallelSort(){//生成大的随机数,放入大的数组int[] arr = new int[100000000];Random random = new Random();for (int i = 0; i < arr.length; i++) {int num = random.nextInt(100000000);arr[i] = num;}// 获取系统当前时间的毫秒数(1970-1-1 0:0:0 000到当前系统时间的总毫秒数 1秒=1000毫秒)long begin = System.currentTimeMillis();// 排序Arrays.parallelSort(arr);//Arrays.sort(arr);// 获取系统当前时间的毫秒数long end = System.currentTimeMillis();// 耗时System.out.println(end - begin);}

运行结果:

9. Arrays.binarySearch(int[] arr, int elt) 方法

使用二分法查找指定元素在数组中的索引,要求数组是有序的。如果找到元素,返回其索引;否则返回负数

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

10. Arrays.fill(int[] arr, int data) 方法

将指定值填充到数组的所有元素中。

import java.util.Arrays;public class ArraysFillExample {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]}
}

11. Arrays.fill(int[] a, int fromIndex, int toIndex, int val) 方法

将指定值填充到数组指定范围的元素中,范围是 [fromIndex, toIndex)

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

12. Arrays.copyOf(int[] original, int newLength) 方法

进行数组拷贝,新数组长度为 newLength。如果 newLength 大于原数组长度,多余部分用默认值填充;如果小于原数组长度,截取前 newLength 个元素。

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

13. Arrays.copyOfRange(int[] original, int from, int to) 方法

拷贝数组指定范围的元素,范围是 [from, to)。to不包含

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

14. Arrays.asList(T... data) 方法

将一组数据转换成 List 集合。

import java.util.Arrays;
import java.util.List;public class ArraysAsListExample {public static void main(String[] args) {List<String> list = Arrays.asList("a", "b", "c");System.out.println(list); // 输出: [a, b, c]}
}

通过以上示例,你可以清晰地了解 Arrays 工具类中各个方法的使用方式和功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计高效的测试用例:从需求到验证

在现代软件开发过程中&#xff0c;测试用例的设计一直是质量保证&#xff08;QA&#xff09;环节的核心。有效的测试用例不仅能够帮助发现潜在缺陷&#xff0c;提升软件质量&#xff0c;还能降低后期修复成本&#xff0c;提高开发效率。尽管如此&#xff0c;如何从需求出发&…

基于YoloV11和驱动级鼠标模拟实现Ai自瞄

本文将围绕基于 YoloV11 和驱动级鼠标实现 FPS 游戏 AI 自瞄展开阐述。 需要着重强调的是&#xff0c;本文内容仅用于学术研究和技术学习目的。严禁任何个人或组织将文中所提及的技术、方法及思路应用于违法行为&#xff0c;包括但不限于在各类游戏中实施作弊等违规操作。若因违…

三角测量——用相机运动估计特征点的空间位置

引入 使用对极约束估计了相机运动后&#xff0c;接下来利用相机运动估计特征点的空间位置&#xff0c;使用的方法就是三角测量。 三角测量 和对极几何中的对极几何约束描述类似&#xff1a; z 2 x 2 R ( z 1 x 1 ) t z_2x_2R(z_1x_1)t z2​x2​R(z1​x1​)t 经过对极约束…

如何本地部署DeepSeek

第一步&#xff1a;安装ollama https://ollama.com/download 打开官网&#xff0c;选择对应版本 第二步&#xff1a;选择合适的模型 https://ollama.com/ 模型名称中的 1.5B、7B、8B 等数字代表模型的参数量&#xff08;Parameters&#xff09;&#xff0c;其中 B 是英文 B…

Git生成公钥和私钥的方式

因为需要访问远程Git服务器&#xff0c;需要使用公钥&#xff1a; 1、先检测电脑上是否已经有.ssh目录 像我这就是没有的 2、开始生成一个新的SSH密钥&#xff08;RSA&#xff09; 打开Git Bash, 然后运行ssh-keygen -t rsa -b 4096 -C "注释" -t rsa是密匙类型…

常用的python库-安装与使用

常用的python库函数 yield关键字openslide库openslide库的安装-linuxopenslide的使用openslide对象的常用属性 cv2库numpy库ASAP库-multiresolutionimageinterface库ASAP库的安装ASAP库的使用 concurrent.futures.ThreadPoolExecutorxml.etree.ElementTree库skimage库PIL.Image…

【Oracle专栏】本地 expdp 导出远程库

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 近期需要在远程备份机器上远程导出数据库,之前用expdp数据泵只导出过本服务器的,本文跨服务器使用expdp 。 2. 测试 2.1 本机装完整oracle时,执行expdp导出远端数据库 实验说明:以下12为本机,14…

Flink KafkaConsumer offset是如何提交的

一、fllink 内部配置 client.id.prefix&#xff0c;指定用于 Kafka Consumer 的客户端 ID 前缀partition.discovery.interval.ms&#xff0c;定义 Kafka Source 检查新分区的时间间隔。 请参阅下面的动态分区检查一节register.consumer.metrics 指定是否在 Flink 中注册 Kafka…

【leetcode】双指针:移动零 and 复写零

文章目录 1.移动零2.复写零 1.移动零 class Solution { public:void moveZeroes(vector<int>& nums) {for (int cur 0, dest -1; cur < nums.size(); cur)if (nums[cur] ! 0)swap(nums[dest], nums[cur]);} };class Solution { public:void moveZeroes(vector&l…

网络安全工程师逆元计算 网络安全逆向

中职逆向题目整理合集 逆向分析&#xff1a;PE01.exe算法破解&#xff1a;flag0072算法破解&#xff1a;flag0073算法破解&#xff1a;CrackMe.exe远程代码执行渗透测试天津逆向re1 re22023江苏省re12023年江苏省赛re2_easygo.exe2022天津市PWN 逆向分析&#xff1a;PE01.exe …

string类(二)

目录 前言 string类的常用接口说明 3、string类对象的容量操作 3.1 size&#xff0c;length和capacity 3.2 empty和clear 3.3 reserve 3.4 resize 4、string类的修改操作 4.1 operator 4.2 c_str 4.3 findnpos 5、string类非成员函数 5.1 operator>>和opera…

医疗影响分割 | 使用 Swin UNETR 训练自己的数据集(3D医疗影像分割教程)

<Swin UNETR: Swin Transformers for Semantic Segmentation of Brain Tumors in MRI Images> 代码地址:unetr 论文地址:https://arxiv.org/pdf/2201.01266 一、下载代码 在Github上下载代码,然后进入SWINUNETR,前两个是针对两个数据集(BRATS21、BTCV)的操作,这里…

在CAD中插入图块后为什么看不到?怎么解决?

按照正确操作插入图块&#xff0c;但图纸上不显示新插入的图块&#xff0c;这是为什么&#xff1f; 原因可能是大家插入的图块太小&#xff0c;导致看不到&#xff0c;显示成一个点&#xff0c;所以大家插入图块的时候记得根据图纸大小&#xff0c;将比例改大一些就可以啦✌️…

【CMAEL多智能体框架】第一节 环境搭建及简单应用(构建一个鲜花选购智能体)

第一节 环境搭建 文章目录 第一节 环境搭建前言一、安装二、获取API1. 使用熟悉的API代理平台2.设置不使用明文存放API 三 、具体应用进阶任务 总结 前言 CAMEL Multi-Agent是一个开源的、灵活的框架&#xff0c;它提供了一套完整的工具和库&#xff0c;用于构建和模拟多智能体…

Flink-序列化

一、概述 几乎每个Flink作业都必须在其运算符之间交换数据&#xff0c;由于这些记录不仅可以发送到同一JVM中的另一个实例&#xff0c;还可以发送到单独的进程&#xff0c;因此需要先将记录序列化为字节。类似地&#xff0c;Flink的堆外状态后端基于本地嵌入式RocksDB实例&…

使用DeepSeek和Kimi快速自动生成PPT

目录 步骤1&#xff1a;在DeepSeek中生成要制作的PPT主要大纲内容。 &#xff08;1&#xff09;在DeepSeek网页端生成 &#xff08;2&#xff09;在本地部署DeepSeek后&#xff0c;使用chatBox生成PPT内容 步骤2&#xff1a;将DeepSeek成的PPT内容复制到Kimi中 步骤3&…

第41天:Web开发-JS应用微信小程序源码架构编译预览逆向调试嵌套资产代码审计

#知识点 1、安全开发-微信小程序-搭建&开发&架构&安全 2、安全开发-微信小程序-编译调试&反编译&泄露 一、小程序创建&#xff08;了解即可&#xff09; 1、下载微信开发者工具 2、创建小程序模版引用 https://developers.weixin.qq.com/miniprogram/dev/d…

Arduino 第十一章:温度传感器

Arduino 第十一章&#xff1a;LM35 温度传感器 一、LM35 简介 LM35 是美国国家半导体公司&#xff08;现德州仪器&#xff09;生产的一款精密集成电路温度传感器。与基于热力学原理的传统温度传感器不同&#xff0c;LM35 能直接将温度转换为电压输出&#xff0c;且输出电压与…

Oracle常用导元数据方法

1 说明 前两天领导发邮件要求导出O库一批表和索引的ddl语句做国产化测试&#xff0c;涉及6个系统&#xff0c;6千多张表&#xff0c;还好涉及的用户并不多&#xff0c;要不然很麻烦。 如此大费周折原因&#xff0c;是某国产库无法做元数据迁移。。。额&#xff0c;只能我手动导…

2022java面试总结,1000道(集合+JVM+并发编程+Spring+Mybatis)的Java高频面试题

1、面试题模块汇总 面试题包括以下十九个模块&#xff1a; Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示…