一.工具类
1.概述
Java类可大致分为三个类:测试类,工具类以及JavaBean类
其中测试类就是我们常用的main方法
Javabean类就是对一类事物的描述类
工具类是帮我们做一些事情的类,但是不描述任何事物的类
2.工具类注意事项
①类名见名知意
②私有化构造方法
工具类不描述任何事物,只是像工具一样帮我们做一些事情,我们不需要对外创建它的对象
③方法定义为静态
我们无法对外创建工具类的对象从而调用方法,因此要将方法定义为静态,从而方便我们使用时直接类名调用
二. Arrays—操作数组的工具类
通过Arrays类,我们可以对数组进行查找,拷贝,排序等操作,极大地方便了我们对数组的使用
Arrays类属于Java. util包下的,我们在使用时需要导包
1.常见方法
⑴toString
通过toString方法我们可以将数组拼接为字符串
如图:通过底层代码我们知道toString也是通过StringBuilder进行字符串的拼接
⑵binarySearch
通过binarySearch我们可以用二分查找来搜索指定的值,方法返回值为搜索值在数组中的索引
如图:若存在返回索引值,不存在返回负值
注:二分查找的前提是数组有序!!!
⑶copyOf, equals
如图:拷贝数组并比较是否相同
注:1. copyOf方法中若新数组长度超出要拷贝的数组长度,超出长度自动补值(0,null)
⑷asList
List<丅> asList(T...a) 将数组转换为List集合
方法的形参为可变参数,众所周知,可变参数实际上就是数组,因此方法的形参我们可以传递任意类型的单个数据以及数组
细节:当方法传递的是数组时,不能传递基本数据类型的数组 ,这是我们可以用Stream流转化为对应的包装类
⑸sort
sort方法主要有3种用法
①sort(arr) 默认将数组升序排序
如图: 这是我们最常用的一种方法
注: sort(arr)方法的底层是通过快速排序实现的
②sort(arr,start, end) 将指定范围的元素排序
该方法是一种扩展,但一般情况下我们用不上
③sort(arr,排序规则) 将数组按指定规则排序
如果我想要将数组降序排序,那还能使用sort方法吗?
答案是当然可以的,想要降序排序,其中我们要在sort方法中填写相应的规则,这就需要匿名内部类的使用了
static <T> void sort( T[] a, Comparator <?super T> c )
按照指定比较器产生的顺序对数组进行排序
Ⅰ 书写方式一
其中的规则就是要重写Compartor接口中的方法
如图:我们利用匿名内部类简化了Comparator接口的实现,并重写了其中的Compare方法
注:该sort方法的底层是通过插入排序+二分查找实现的
因此我们可以这样理解其中的参数及方法体
参数o1:表示无序数列中遍历得到的每一个元素
参数o2:表示有序数列中的元素
返回值:
负数表示当前要插入的值是小的放到前面
正数表示当前要插入的值是大的放到后面
0表示当前要插入的元素跟现在的元素一样,同样放到后面
简单理解:o1-o2 升序排序
o2-o1 降序排序
注:参数类型需跟数组类型保持一致,基本数据类型要转换为对应的包装类
Ⅱ 书写方式二
若我们指定的规则只是与默认的规则相反,比如是简单的降序,那么我们就可以直接引用Collections中已经给我们定义好的一个方法
当然sort方法若要更改默认的顺序,就要重写对应的规则,在我们平时使用时很不方便,那有没有什么方法可以简化规则的代码呢?
2.Lambad表达式
⑴函数式编程
函数式编程是一种思想特点,忽略面向对象的复杂语法,强调做什么,而不是谁去做
简单来说就是我们更加关注方法体中的逻辑,而不是创建出来的对象
Lambda表达式就是函数式思想的体现
⑵Lambda表达式
①概述
Lambda表达式是JDK8开始的一种新语法特点
Lambda表达式只能简化函数式接口(只有一个抽象方法的接口)的匿名内部类的写法
②格式
( )->{ }
( )对应方法的形参
->固定格式
{}对应着方法的方法体
③Lambda的省略规则
Ⅰ.参数类型可以省略不写
Ⅱ.如果只有一个参数,()也可以省略
Ⅲ.如果方法体只有一行,大括号,分号,return可以省略不写
那么根据Lambda表达式我们来对上面的sort方法进行简写吧
若有不足,错误之处,望指出更正(˵¯͒〰¯͒˵)