目录
一.Arrays
操作数组的工具类
二.Lambda表达式
1.注意:
2.省略规则
一.Arrays
操作数组的工具类
方法名 作用
public static String toString(数组) 把数组拼接成一个字符串
public static int binarySearch(数组,查找的元素) 二分查找法查找元素
public static int[ ] copyof(原数组,新数组长度) 拷贝数组
public static int[ ] copyofRange(原数组,起始索引,结束索引) 拷贝数组(指定范围)
public static void fill(数组,元素) 填充数组
public static void sort(数组) 按照默认方式进行数组排序
public static void sort(数组,排序规则) 按照指定的规则排序代码示范:
package ArrayDemo; import java.util.Arrays; public class ArrayDemo1 { public static void main(String[] args) { //1.Arrays.toString int[] arr = {1,2,3,4,5,6,7,8,9,10}; System.out.println(Arrays.toString(arr)); //2.Arrays.binarySearch的使用,数组必须是有序的 System.out.println(Arrays.binarySearch(arr, 5)); //3.Arrays.copyOf拷贝时,新数组的长度大于就数组,多出的部分会默认添加初始值 //新数组小于旧数组的话就会是部分拷贝 int[] arr1 = Arrays.copyOf(arr,11); System.out.println(Arrays.toString(arr1)); //4.Arrays.copyOfRange拷贝时,包左不包右,索引6对应的是数据7 int[] arr2 = Arrays.copyOfRange(arr,2,6); System.out.println(Arrays.toString(arr2)); //5.Arrays.fill int[] arr3 = new int[10]; Arrays.fill(arr3,5); System.out.println(Arrays.toString(arr3)); //6.Arrays.sort,使用时默认是快速排序,升序 int[] arr4 = {1,4,67,3,2,5,7}; Arrays.sort(arr4); System.out.println(Arrays.toString(arr4)); } }
结果展示:
public static void sort(数组,排序规则)
底层原理:
利用插入排序 + 二分查找的方式进行排序的
默认把0索引的数据当做是有序的序列,1索引到最后认为是无序的序列遍历无序的序列得到里面的每一个元素,假设当前遍历得到的元素是A元素
把A往有序序列中进行插入,在插入的时候,是利用二分查找确定A元素的插入点
拿着A元素,跟插入点的元素进行比较,比较的规则就是compare方法的方法体
如果方法的返回值是负数,拿着A继续跟前面的数据进行比较
如果方法的返回值是正数,拿着A继续跟后面的数据进行比较
如果方法的返回值是9,也拿着A跟后面的数据进行比较
直到能确定A的最终位置为止
compare方法的形式参数:
参数一 o1:表示在无序序列中,遍历得到的每一个元素参数二 o2:有序序列中的元素
返回值:
负数: 表示当前要插入的元素是小的,放在前面正数:表示当前要插入的元素是大的,放在后面
0: 表示当前要插入的元素跟现在的元素比是一样的们也会放在后面
简单理解:
o1 - o2: 升序排序
o2 - o1: 降序排序
二.Lambda表达式
1.注意:
(1)Lambda表达式可以用来简化匿名内部类的书写
(2)Lambda表达式只能简化函数式接口的匿名内部类的写法
(3)函数式接口:有且仅有一个抽象方法的接口叫做函数式接口,接口上可以加@FunctionalInterface注解
2.省略规则
(1)参数类型可以不写
(2)只有一个参数,参数类型可以省略,同时( )也可以省略
(3)如果Lambda表达式的方法体只有一行,大括号,分号,return可以省略不写,但需要同时省略
代码示范:
package Demo; public class Test { public static void main(String[] args) { //匿名内部类 //之前的写法 method(new swim() { @Override public void swimming() { System.out.println("正在游泳1"); } }); //Lambda的写法 method(()-> { System.out.println("正在游泳2"); } ); } public static void method(swim s){ s.swimming(); } } //函数式接口 interface swim{ public abstract void swimming(); }
结果展示: