Java常见API——操作数组的工具Arrays

一.工具类

1.概述

Java类可大致分为三个类:测试类,工具类以及JavaBean类

其中测试类就是我们常用的main方法

Javabean类就是对一类事物的描述类

工具类是帮我们做一些事情的类,但是不描述任何事物的类

2.工具类注意事项

①类名见名知意

②私有化构造方法

工具类不描述任何事物,只是像工具一样帮我们做一些事情,我们不需要对外创建它的对象

③方法定义为静态

我们无法对外创建工具类的对象从而调用方法,因此要将方法定义为静态,从而方便我们使用时直接类名调用

二. Arrays—操作数组的工具类

通过Arrays类,我们可以对数组进行查找,拷贝,排序等操作,极大地方便了我们对数组的使用

Arrays类属于Java. util包下的,我们在使用时需要导包

1.常见方法

a1130fa7412941c58ca6b2a9130e6ab2.png

1a8ef881016d40378b633125c0f23960.png

⑴toString

通过toString方法我们可以将数组拼接为字符串

如图:通过底层代码我们知道toString也是通过StringBuilder进行字符串的拼接

6420c742dc7f41059994a38507e4386d.png

⑵binarySearch

通过binarySearch我们可以用二分查找来搜索指定的值,方法返回值为搜索值在数组中的索引

如图:若存在返回索引值,不存在返回负值

89303eba816e415790552c6f7483df05.png

注:二分查找的前提是数组有序!!!

⑶copyOf, equals

如图:拷贝数组并比较是否相同d232af0bfd2e4ac2b5349e6936d505cd.png

注:1. copyOf方法中若新数组长度超出要拷贝的数组长度,超出长度自动补值(0,null)

⑷asList

List<丅> asList(T...a)  将数组转换为List集合

方法的形参为可变参数,众所周知,可变参数实际上就是数组,因此方法的形参我们可以传递任意类型的单个数据以及数组

f6ceed60ded641e1b0d860f742594152.png

细节:当方法传递的是数组时,不能传递基本数据类型的数组 ,这是我们可以用Stream流转化为对应的包装类

⑸sort

sort方法主要有3种用法

①sort(arr)   默认将数组升序排序

如图: 这是我们最常用的一种方法

1eaeb8013ef04105baaab0a9dc88e589.png

注: sort(arr)方法的底层是通过快速排序实现的

②sort(arr,start, end)  将指定范围的元素排序

该方法是一种扩展,但一般情况下我们用不上

③sort(arr,排序规则)  将数组按指定规则排序

如果我想要将数组降序排序,那还能使用sort方法吗?

答案是当然可以的,想要降序排序,其中我们要在sort方法中填写相应的规则,这就需要匿名内部类的使用了

static <T> void sort( T[] a, Comparator <?super T> c )

按照指定比较器产生的顺序对数组进行排序

Ⅰ 书写方式一

其中的规则就是要重写Compartor接口中的方法

如图:我们利用匿名内部类简化了Comparator接口的实现,并重写了其中的Compare方法

ea3ff8d3d3cc427b9ca7dae2561b8a5b.png

注:该sort方法的底层是通过插入排序+二分查找实现的

因此我们可以这样理解其中的参数及方法体

参数o1:表示无序数列中遍历得到的每一个元素

参数o2:表示有序数列中的元素

返回值:

负数表示当前要插入的值是小的放到前面

正数表示当前要插入的值是大的放到后面

0表示当前要插入的元素跟现在的元素一样,同样放到后面

简单理解:o1-o2 升序排序

o2-o1 降序排序

注:参数类型需跟数组类型保持一致,基本数据类型要转换为对应的包装类

Ⅱ 书写方式二

若我们指定的规则只是与默认的规则相反,比如是简单的降序,那么我们就可以直接引用Collections中已经给我们定义好的一个方法

f1c03c3bd9354970ae65c655dd45acbd.png

2be270c2aee84023b74e7052921a8c52.png

 

当然sort方法若要更改默认的顺序,就要重写对应的规则,在我们平时使用时很不方便,那有没有什么方法可以简化规则的代码呢?

2.Lambad表达式

⑴函数式编程

函数式编程是一种思想特点,忽略面向对象的复杂语法,强调做什么,而不是谁去做

简单来说就是我们更加关注方法体中的逻辑,而不是创建出来的对象

Lambda表达式就是函数式思想的体现

⑵Lambda表达式

①概述

Lambda表达式是JDK8开始的一种新语法特点

Lambda表达式只能简化函数式接口(只有一个抽象方法的接口)的匿名内部类的写法

②格式

( )->{  }

( )对应方法的形参

->固定格式

{}对应着方法的方法体

③Lambda的省略规则

Ⅰ.参数类型可以省略不写

Ⅱ.如果只有一个参数,()也可以省略

Ⅲ.如果方法体只有一行,大括号,分号,return可以省略不写

那么根据Lambda表达式我们来对上面的sort方法进行简写吧

54da7dcb069d4f5897c166f3d54b9e62.png

 若有不足,错误之处,望指出更正(˵¯͒〰¯͒˵)

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤姆大聪明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值