java学习的第1个知识点总结(Arrays详细介绍,第二期,针对JDK14)

前言

这是一个渣渣个人学习过程中的产物,此次是对Arrays工具类静态方法的详细介绍的第二期。转载请注明出处

简介

Arrays类位于java.util包下,使用该类必须导入java.util.Arrays。该类拥有操纵数组的各种方法。该类还包含一个静态工厂,可将数组视为集合(原文: This class also contains a static factory that allows arrays to be viewed as lists.)

方法说明和测试

1.public static int mismatch​(boolean[] a, boolean[] b)

JDK9之后才有的方法。

该方法有多个参数个数相同的重载方法,即参数可以是任意两个相同类型的数组(8种基本类型和引用类型)。用于比较两个数组,返回数组第一个不相同的元素的下标。

当两个元素完全相同时返回-1;当两个数组的元素个数不相同时且其中一个数组的元素完全包含于另一个元素,则会返回较短的元素的长度;当两个数组中至少存在一个null时,会报空指针异常
在这里插入图片描述

2.public static int mismatch​(boolean[] a, int aFromIndex, int aToIndex, boolean[] b, int bFromIndex, int bToIndex)

JDK9之后才有的方法。

在特定范围内查找第一个不同的元素下标,fromIndex(包括起始索引,可以为0)、toIndex(不包括终止索引,可以为两数组中较短数组的长度)。

该方法有多个重载方法,参数可以是任意类型,注意,他返回的不是下标位置,而是返回的相对于给定的FromIndex的位置。

源码如下:
在这里插入图片描述

扫描二维码关注公众号,回复: 11272081 查看本文章

正常使用该方法,未找到不一样的元素,返回-1,否则返回相对FromIndex位置;
在这里插入图片描述
若aFromIndex>aToIndex或bFromIndex>bToIndex会报非法参数异常;
在这里插入图片描述
在这里插入图片描述
若aFromIndex<0或aToIndex>a.length,同理bFromIndex<0或bToIndex>b.length,则会报数组越界异常;
在这里插入图片描述
在这里插入图片描述
若两数组中至少有一个数组为null,会报空指针异常;
在这里插入图片描述
在这里插入图片描述
若给定的两个数组比较的元素个数不同,且两数组的的合法索引处的元素相同,则会返回bFromIndex-aToIndex;
在这里插入图片描述
在这里插入图片描述

3.public static int compare​(boolean[] a,boolean[] b)

JDK9之后才有的方法。

该方法有多个参数个数相同的重载方法,用于比较两个数组的大小

若两数组长度不一,且相同下标处的元素相同(注意,这里指的不是null和length不为空之间的比较)。例如:{1,2,3}和{1,2,3,4,5},返回a.length-b.length,所以返回-2;
若两数组的元素完全相同,返回0;
否则返回两数组第一个大小不一样的元素的比较结果,小于返回-1,大于返回1;
这里布尔类型的数组若元素不相同,则判断a数组不同位置是否为true,是则返回1,否则返回0;
若两数组之间有nul,则判断a是否为null,是返回-1,否则返回1;
在这里插入图片描述
在这里插入图片描述

4.public static int compare(byte [] a,int aFromIndex,int aToIndex,byte [] b,int bFromIndex,int bToIndex)

JDK9之后才有的方法。

在指定范围内比较两个数组,fromIndex(包括起始索引,可以为0)、toIndex(不包括终止索引,可以为两数组中较短数组的长度)。

该方法有多个参数个数相同的重载方法,参数可以为任意类型。

异常情况和mismatch方法相同,若终止索引大于起始索引,报非法参数异常;若起始索引和终止索引不合法(起始索引小于0,终止索引大于数组长度)会报数组越界错误;若两数组中至少含有一个数组为null,报空指针异常。
在这里插入图片描述
该方法会一次比较指定范围内的对应元素,直至出现两个不同的元素,比较量元素的值,若a[Index]<b[Index],返回-1;若a[Index]>b[Index],返回1;完全相同返回0;若两数组指定长度不一,且对两数组均合法的指定下标的元素值相同,则会返回指定范围的差值。
在这里插入图片描述

5.public static compareUnsigned(byte[] a,byte[] b)

JDK9之后才有的方法。

比较两个数组的第一个不同元素的无符号数大小,这里的无符号数不是指的把-1变成1来做比较,而是在负数的补码上下了功夫。(实话,这个方法,我都不想去试,因为我觉得用不上,可能以后啪啪打脸,所以我就直接文字描述了)它是找到两个数组的第一个同下标值却不匹配的元素。然后该方法会调用对应的包装类的compareUnsigned方法(如果你对这个方法很熟悉,恭喜你理解了这个方法是干什么的了)。byte和short两种类型不满4个字节,会强制转换为int,然后&上0xff或0xffff(什么意思?就是你原来一个负数的补码是0x81,然后他帮你转换成了0x00000081);int和long两种类型会直接让符号位溢出(就是加入你一个int值是0x80000000,他给你加上0x80000000,然后你的符号位成功溢出了,你得到了一个0x00000000,但是,我们都知道负数存的是补码,那刚刚那个数应该是-32768,现在变成了0),所以这个方法不是简单的把你的数取了个反而已。

所以,那你可以拿来干什么????我也不知道,这个就得看你的计算机原理学的怎么样了,我不打算深究这个方法,以后用到再说吧(我太菜了,没看出来可以拿来干啥,如果是我,我会选择让int&0x7FFFFFFF来消除符号位)。

该方法有多个参数个数相同的重载方法,但是注意和前几个方法不同,他只有参数为byte[]、int[]、short[]、long[]四种,不适用于实数类型、字符类型、引用类型。

6.public static compareUnsigned(byte[] a, int aFromIndex, int aToIndex, byte[] b, int bFromIndex, int bToIndex)

JDK9之后才有的方法

顾名思义,就是上一个方法限定了范围,既然上一个方法不深究,这一个也是

7.static boolean[] copyOf​(boolean[] original, int newLength)

JDK6之后才有的方法

返回指定长度的original数组的的副本。该方法有多个参数个数相同的重载方法,参数可为任意类型的数组(基本类型和引用类型)。

若newLength>original.length,则会使用负元素来填充空位(在数组末尾填充);
在这里插入图片描述
若newLength是负数,会报负大小的数组参数错误(啊,我翻译的可能不大好看);
在这里插入图片描述
若original数组为空,报空指针异常;
在这里插入图片描述

8.public static boolean[] copyOfRange​(boolean[] original,int from,int to)

JDK6之后才有的方法

返回一个该方法有多个参数个数相同重载方法,数组参数可以为任意类型的数组(基本类型和引用类型)。

跟上一个方法比较,多一个情况,就是from>to的时候,会报非法参数错误,其余相同。
在这里插入图片描述

9.public static void fill​(char[] a,char val)

将整个数组全部填充为同一个参数val。该方法有多个参数个数相同的重载方法,参数可以是所有类型数组。
在这里插入图片描述

10.public static void fill​(char[] a,int fromIndex,int toIndex,char val)

将指定范围的元素填充为val,若fromIndex>toIndex,报不合法参数错误;fromIndex<0或toIndex>a.length,报数组越界错误。
该方法有多个参数个数相同的重载方法,参数可以是任意类型数组。
在这里插入图片描述

结语

好好学习,天天向上。

猜你喜欢

转载自blog.csdn.net/qq_44809362/article/details/106044157