Arrays类常用方法详解(源码分析)

Arrays.equals()

        众所周知,equals方法是比较里面的内容是否相等的方法,那Arrays中的equals()方法,就是重写了Object中equals(),用来比较数组中的内容是否相等的方法。

下面让我们一起来看一下它的源码:

public static boolean equals(int[] var0, int[] var1) {if (var0 == var1) {//判断两个数组的地址是否相同;return true;//地址相同的话肯定返回true;} else if (var0 != null && var1 != null) {//如果不同,判断是否为空,不为空才进入下面的判断int var2 = var0.length;//拿到var0的长度if (var1.length != var2) {//判断俩数组长度是否相等return false;//长度不同返回false} else {for(int var3 = 0; var3 < var2; ++var3) {//循环逐个判断其中每个字符是否相等if (var0[var3] != var1[var3]) {return false;//但凡有一个不相同,直接返回false}}return true;//其中每个字符都相等,返回true}} else {return false;//如果不符合以上条件,返回false}
}

Arrays.toString()

        与equals方法一样,Arrays类中的toString()与我们所知道的toString方法的用法是相通的,将数组转换为String格式.

老规矩,让我们继续看一下Arrays类中toString方法的底层实现:

StringBuilder是Java中的另一个类,后期我会对其专门分析:String,StringBuilder,Stringbuffer

public static String toString(int[] var0) {//传进来一个参数var0if (var0 == null) {//首先判断他是否为空值--nullreturn "null";} else {//不为空的话,继续向下判断int var1 = var0.length - 1;//拿到数组最大下标if (var1 == -1) {//判断该值知否有效return "[]";//(即判断是不是空数组)} else {StringBuilder var2 = new StringBuilder();//创建一个StringBuilder类var2.append('[');//给结果集添加[int var3 = 0;while(true) {//遍历整个数组var2.append(var0[var3]);//添加数组中的该值到结果集中if (var3 == var1) {//如果var3==数组最大下标(即:遍历到了最后一项)return var2.append(']').toString();//为结果集加上]}var2.append(", ");//添加格式","++var3;//var3的值+1}}}}

Arrays.binarySearch(a[], from, to, key);

        binarySearch--二分搜索,Arrays类中定义的可用来以二分搜索的方法是用于在有序数组中查找特定元素的索引。并返回该值的下标,没有的话返回,它会返回一个负数,这个负数是目标元素应该插入的位置的相反数减1。

源码分析:

   >>>是Java中无符号右移操作符,意思是n/2

    public static int binarySearch(int[] var0, int var1, int var2, int var3) {rangeCheck(var0.length, var1, var2);//该方法是用来检查传入的from与to是否符合条件return binarySearch0(var0, var1, var2, var3);}/*** * @param var0 传入的数组* @param var1 from* @param var2 to* @param var3 要查找的值* @return*/private static int binarySearch0(int[] var0, int var1, int var2, int var3) {int var4 = var1;//拿到from的值int var5 = var2 - 1;//拿到to的下标while(var4 <= var5) {//循环int var6 = var4 + var5 >>> 1;//得到from与to的一半int var7 = var0[var6];//拿到中间元素的值if (var7 < var3) {//将该值与目标值进行比对var4 = var6 + 1;//该值小于目标值,from变为中间值+1} else {if (var7 <= var3) {return var6;//在var7<var3的前提下<= 即 var7==var3,//返回中间值(即查找成功)}var5 = var6 - 1;//中间值}}return -(var4 + 1);//如果实在查不到,返回from+1的负值}

Arrays.fill()

        将指定的值分配给指定数组值的指定范围的每个元素。 要填补的范围从索引fromIndex (包括)扩展到索引toIndex ,排他。 (如果是fromIndex==toIndex ,要填充的范围是空的。) 

源码分析: 

    public static void fill(int[] a, int fromIndex, int toIndex, int val) {rangeCheck(a.length, fromIndex, toIndex);for (int i = fromIndex; i < toIndex; i++)//循环[from,to]a[i] = val;//将每个值赋值为val}

Arrays.hashcode()

        根据指定数组的内容返回哈希码。

源码分析: 

    public static int hashCode(int a[]) {if (a == null)return 0;int result = 1;for (int element : a)//循环拿出每个值result = 31 * result + element;//通过将每个元素的值与前一个元素的哈希值进行特定的运算来生成最终的哈希码return result;}

Arrays.copyOfRange()

指定数组的指定范围复制到新数组中,
    public static int[] copyOfRange(int[] original, int from, int to) {int newLength = to - from;//计算范围if (newLength < 0)//异常处理,如果范围<0,返回异常throw new IllegalArgumentException(from + " > " + to);int[] copy = new int[newLength];//new一个数组,长度为需要复制的长度System.arraycopy(original, from, copy, 0,Math.min(original.length - from, newLength));//使用arraycopy()方法,将刚才new出来的数组copy到目标数组中return copy;}

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

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

相关文章

Find My产品越来越得到市场认可,伦茨科技ST17H6x芯片赋能厂家

苹果发布AirTag发布以来&#xff0c;大家都更加注重物品的防丢&#xff0c;苹果的 Find My 就可以查找 iPhone、Mac、AirPods、Apple Watch&#xff0c;如今的Find My已经不单单可以查找苹果的设备&#xff0c;随着第三方设备的加入&#xff0c;将丰富Find My Network的版图。产…

LCR 164. 破解闯关密码

解题思路&#xff1a; 贪心 class Solution {public String crackPassword(int[] password) {String[] strs new String[password.length];for(int i 0; i < password.length; i)strs[i] String.valueOf(password[i]);Arrays.sort(strs, (x, y) -> (x y).compareTo(…

考研复习c语言初阶(1)

本人准备考研&#xff0c;现在开始每天更新408的内容&#xff0c;目标这个月结束C语言和数据结构&#xff0c;每天更新~ 一.再次认识c语言 C语言是一门通用计算机编程语言&#xff0c;广泛应用于底层开发。C语言的设计目标是提供一种能以简易 的方式编译、处理低级存储器、产生…

面试题:单例模式输出静态变量

面试题 一、写出两种情况下的运行结果。第一种如下面的代码所示&#xff1b;第二种是把“1”所在行注释掉&#xff0c;把“2”行的注释去掉。 class Singleton {private static Singleton singleton new Singleton(); //1static int i;static int j 0;//private static Sing…

学习Java的第五天

目录 Java中有三种主要的循环结构&#xff1a; while 循环 实例 do…while 循环 实例 for循环 实例 三种循环之间的区别 增强 for 循环 实例 break 关键字 语法 实例 continue 关键字 语法 实例 Java 循环结构 while &#xff0c;do…while 及 for 顺序结构的…

WordPress建站入门教程:如何选择和设置固定链接结构?

我们成功搭建好WordPress网站后&#xff0c;发布的文章对应的URL地址默认是使用“日期和名称型”&#xff0c;即是网站域名跟着的是年月日&#xff0c;最后是文章标题&#xff0c;如http://www.yigujin.com/2024/03/06/免费响应式WordPress博客主题JianYue/ 为了让我们的文章U…

委员建议进一步扩大香港与内地金融市场互联互通发展

在我们共同追寻金融发展的星辰大海之际&#xff0c;我怀着无比激动的心情&#xff0c;向诸位委员提议进一步扩大香港与内地金融市场互联互通发展。这个议题犹如一颗璀璨的明珠&#xff0c;闪耀着诱人的光芒&#xff0c;吸引着我们为之奋斗。让我们共同探讨这一话题&#xff0c;…

在【IntelliJ IDEA】中配置【Tomcat】【2023版】【中文】【图文详解】

作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;IntelliJ IDEA为Web服务器提供了卓越的支持&#xff0c;从而极大地简化了程序员在Web开发过程中的工作流程。学习Java Web开发实质上就是掌握如何创造动态Web资源&#xff0c;这些资源在完成开发后&…

中国气象要素年度空间插值数据集

摘要 中国气象要素年度空间插值数据集是地理遥感生态网平台基于全国2400多个站点的气象要素站点日观测数据&#xff0c;在计算各气象要素年值的基础上&#xff0c;基于Anuspl插值软件生成1960-2021年各年度蒸发量、地温、降水量、气压、相对湿度、日照时数 、气温、风速8个气象…

server win搭建apache网站服务器+php网站+MY SQL数据库调用电子阅览室

一、适用场景&#xff1a; 1、使用开源的免费数据库Mysql&#xff1b; 2、自己建网站的发布&#xff1b; 3、使用php代码建网站&#xff1b; 4、使用windows server作为服务器&#xff1b; 5、使用apache作为网站服务器。 二、win server 中apache网站服务器搭建 &#xff0…

UUU.咕咚视频批量混剪软件下载,批量剪辑个体无限批量生成,批量合成视频,批量混剪视频的软件是什么样的?批量剪辑软件在哪下载?批量混剪软件下载容易吗?

[md]# 前言 工具的产生源于dy出的火山引擎的云视频混剪制作是按分钟数收费的&#xff0c;这个软件既能实现正常混剪也能避免二次收费。属于FFMPEG合成的。 欢迎大家给一些好的建议和功能&#xff0c;回复可见&#xff0c;附加了一些天卡&#xff0c;周卡&#xff0c;请大家不要…

excel统计分析——重复测量设计

参考资料&#xff1a;生物统计学 裂区设计中的裂区通常是指空间上的裂区&#xff0c;如果对试验指标进行连续测量时&#xff0c;时间也可以作为裂区因素。重复测量设计实际上就是时间裂区设计。进行试验结果的统计分析时&#xff0c;将试验因素作为主区&#xff0c;时间因素作为…

OPC UA 学习:文件传输

本博文是OPC 10000-20: UA Part 20: File Transfer 的学习笔记。 OPC UA的客户端需要读写服务器端的文件&#xff0c;OPCUA 规范中&#xff0c;是通过文件模型实现的。客户端通过调用文件模型中的方法来处理文件。 在控制系统中&#xff0c;需要下载配置文件&#xff0c;工艺文…

苍穹外卖学习-----2024/03/08

1.新增菜品 工具类AliOssUtil .java Data AllArgsConstructor Slf4j public class AliOssUtil {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;/*** 文件上传** param bytes* param objectName* return*/pub…

准谐振PWM控制器-能够实现多种保护功能FAN6921MRMY 功率因数控制器

高度集成的FAN6921MRMY将功率因数控制器 (PFC) 和准谐振 PWM 控制器相结合。集成提供了成本高效的设计&#xff0c;可减少外部组件数量。对于 PFC&#xff0c;FAN6921MRMY使用控制导通时间技术提供调节的直流输出电压&#xff0c;执行自然的功率因数校正。FAN6921MRMY使用创新的…

springBoot mybatis-plus整合

1 pom.xml 配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM…

微服务超大Excel文件导出方案优化

1、在导出Excel时经常会碰到文件过大&#xff0c;导出特别慢 2、微服务限制了请求超时时间&#xff0c;文件过大情况必然超时 优化思路&#xff1a; 1、文件过大时通过文件拆分、打包压缩zip&#xff0c;然后上传到oss,并设置有效期&#xff08;30天过期&#xff09; 2、把…

[数据集][目标检测]垃圾检测数据集VOC+YOLO格式6004张18类别垃圾

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;6004 标注数量(xml文件个数)&#xff1a;6004 标注数量(txt文件个数)&#xff1a;6004 标注…

基于交叉表生成风控规则(Python)

大家好&#xff0c;我是东哥。 规则是风控策略中最常用的工具之一&#xff0c;生成、筛选、监控、调优&#xff0c;几乎每天都在打交道&#xff0c;本篇来介绍如何基于交叉表来生成风控规则&#xff0c;并且如何基于评估指标进行筛选。 出品人&#xff1a;东哥起飞 专栏&#…

【Spring Boot 源码学习】BootstrapContext的实际使用场景

《Spring Boot 源码学习系列》 BootstrapContext的实际使用场景 一、引言二、往期内容三、主要内容3.1 BootstrapContext3.2 BootstrapRegistry 初始化器实现3.3 BootstrapContext 的实际使用场景3.3.1 早期启动时3.3.2 环境配置准备完成时3.3.3 应用上下文准备完成后关闭 Boot…