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
类的属性(如age
和name
)。 - 年龄比较:通过
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
工具类中各个方法的使用方式和功能。
相关文章:

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…...

无人机图像拼接数据的可视化与制图技术:以植被监测为例
无人机技术在生态环境监测中的应用越来越广泛,尤其是在植被监测领域。通过无人机获取的高分辨率影像数据,结合GIS技术,可以实现对植被覆盖、生长状况等的精确监测与分析。本文将通过一个实际案例,详细讲解无人机图像拼接数据的可视…...
在 debian 12 上安装 mysqlclient 报错
报错如下 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting mysqlclientUsing cached https://pypi.tuna.tsinghua.edu.cn/packages/61/68/810093cb579daae426794bbd9d88aa830fae296e85172d18cb0f0e5dd4bc/mysqlclient-2.2.7.tar.gz (91 kB)Installi…...
python基础入门:7.1迭代器与生成器
Python迭代器与生成器深度解析:高效处理海量数据的利器 # 大文件分块读取生成器模板 def chunked_file_reader(file_path, chunk_size1024*1024):"""分块读取大文件生成器"""with open(file_path, r, encodingutf-8) as f:while Tru…...
Docker 容器 Elasticsearch 启动失败完整排查记录
背景 在服务器上运行 Docker 容器 es3,但 Elasticsearch 无法正常启动,运行 docker ps -a 发现 es3 处于 Exited (1) 状态,即进程异常退出。 本次排查从错误日志、容器挂载、权限问题、SELinux 影响、内核参数等多个方面入手,最…...

达梦数据使用笔记
相关文档: 达梦官网 达梦技术文档 1.安装完成后在开始菜单中搜索DM 目录:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\达梦数据库 下有所有相关信息 2.数据迁移 https://eco.dameng.com/document/dm/zh-cn/start/mysql_dm.html https:…...
操作系统中的任务调度算法
一、引言 在操作系统中,任务调度算法是核心组件之一,它负责合理分配有限的 CPU 资源,以确保系统的高效运行和良好的用户体验。任务调度的目标是实现公平性、最小化等待时间、提高系统吞吐量,并最大化 CPU 的利用率。不同的任务调…...
Linux 虚拟服务器(LVS)技术详解
一、LVS 概述 Linux 虚拟服务器(Linux Virtual Server,简称 LVS)是由章文嵩博士开发的一种开源的服务器集群技术,它工作在 Linux 内核空间,为构建高可用、可扩展的网络服务提供了一种高效的解决方案。LVS 可以将多个真…...

AIoT时代来临,物联网技术如何颠覆未来生活?
在这个万物互联的时代,“物联网”(IoT)正以前所未有的速度改变我们的生活,而“AIoT”则是在物联网基础上融入人工智能技术,赋予设备更高的智能和自主决策能力。随着5G、边缘计算和云技术的不断发展,物联网正…...
C++17 新特性解析
C++17 是 C++ 标准的一个重要更新,它在 C++11/14 的基础上引入了许多新特性,进一步简化了代码编写、提升了性能和类型安全性。以下是 C++17 的主要特性分类介绍: 一、语言核心改进 1. 结构化绑定(Structured Bindings) 允许将元组、结构体或数组的成员直接解包到变量中。…...
嵌入式软件C语言面试常见问题及答案解析(四)
嵌入式软件C语言面试常见问题及答案解析(四) 原本打算将链表相关的面试题整合到一个文档中,奈何写着写着就发现题目比较多,题型也比较丰富,所以导致上一篇已经足够长了,再长也就有点不礼貌了。 所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者…...
在 C# 中,处理 Excel 和 PDF 文件的库有很多。以下是一些比较常用的选择
读取 Excel 文件的库 NPOI 用途:可以读取和写入 .xls 和 .xlsx 文件。特点:无需安装 Microsoft Office,支持简单的 Excel 操作,如格式化、公式、图表等。 EPPlus 用途:主要用于 .xlsx 格式(Excel 2007 及以…...

绩效归因概述
绩效归因概述 1. 分类2. 基于净值的归因方法2.1 发展背景2.2 择时选股模型 T-M模型2.3 择时选股模型 H-M模型2.4 择时选股模型 C-L模型2.5 风格配置模型-Sharpe2.6 多因子模型 Fama-French32.7 多因子模型 Carhart42.8 多因子模型 Fama-French5 3. 基于持仓的归因方法3.1 发展背…...
Spring Boot 中加载多个 YAML 配置文件
在 Spring Boot 中加载多个 YAML 配置文件是一个常见的需求,通常用于将配置信息分离到多个文件中以便于管理和维护。Spring Boot 提供了灵活的方式来加载多个 YAML 配置文件。 以下是一些方法和步骤,用于在 Spring Boot 应用中加载多个 YAML 配置文件&a…...
厚植创新实力、聚焦生物科技:柏强制药的责任与机遇
在当今快速发展的医药行业中,创新已成为企业竞争的核心动力。贵州柏强制药作为医药领域的佼佼者,正以科技创新为引领,聚焦生物科技领域,不断突破,不仅为人民的健康事业贡献力量,更在激烈的市场竞争中抓住了…...
Linux中getifaddrs函数
文章目录 **函数原型****参数****返回值****释放资源****`struct ifaddrs` 结构****示例代码****输出示例****相关函数****总结**getifaddrs 是 Linux(以及其他 Unix-like 系统)中用于获取本机网络接口信息的系统调用。它提供了一种简单的方法来获取所有网络接口的地址信息,…...

【HarmonyOS Next 自定义可拖拽image】
效果图: 代码: import display from "ohos.display" import { AppUtil } from "pura/harmony-utils"/*** 自定义可拖拽图标组件*/ Component export default struct DraggableImage {imageResource?: ResourceimageHeight: numbe…...
解决No module named ‘llama_index.llms.huggingface‘
执行下面的脚本,报错No module named llama_index.llms.huggingface’执行下面的脚本,报错No module named llama_index.llms.huggingface’执行下面的脚本,报错No module named llama_index.llms.huggingface’执行下面的脚本,报…...

SearchBar组件的功能与用法
文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"Material3中的IconButton"相关的内容,本章回中将介绍SearchBar组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…...
13.推荐系统的性能优化
接下来我们将学习推荐系统的性能优化。推荐系统的性能优化对于提升推荐结果的生成速度和系统的可扩展性至关重要,尤其是在处理大规模数据和高并发请求时。在这一课中,我们将介绍以下内容: 性能优化的重要性常见的性能优化方法实践示例 1. 性…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...