java后端开发day30-常见算法二-Arrayslambda
目录
java后端开发day30–常见算法(二)——-Arrays&lambda
(以下内容全部来自上述课程)
1.Arrays
操作数组的工具类。
细节:
copyOf:新长度<老长度—-部分拷贝,新长度=老长度—-完全拷贝,新长度>老长度—-会补上默认初始值
copyOfRange:包头不包尾,包左不包右
sort1:给 基本 数据类型进升序排列
底层原理:快速排序
sort2:给 引用 数组类型进行排序,基本需变包装类
底层原理:插入排序+二分查找
2.Lambda表达式
简化代码
1.函数式编程
一种思想特点。
忽略面向对象的复杂语法,强调做什么,而不是谁去做。
Lambda表达式就是函数思想的体现。
2.标准格式
Lambda表达式是JDK8开始后的一种新语法形式。
()->{}
- ()对应着方法的形参
- ->固定格式
- {}对应着方法的方法体
注意点:
Lambda表达式可以用来简化 匿名内部类 的书写。
Lambda表达式只能简化 函数式接口 的匿名内部类的写法。
函数式接口:
有且仅有一个抽象方法的接口叫做函数式接口,接口上方可以加@FunctionalInterface注解。
package Lambda;
public class LambdaDemo1 {
public static void main(String[] args) {
//1.利用匿名内部类的形式去调用下面的方法
//调用一个方法的时候,如果方法的形参是一个接口,那么我们传递这个接口的实现类对象
//如果实现类对象只要用到一次,就可以使用匿名内部类的形式书写
method(new Swim(){
@Override
public void swimming() {
System.out.println("我在游泳");
}
});
//2.利用Lambda表达式的形式去调用下面的方法
//Lambda表达式的格式:
//(参数列表) -> {方法体}
//如果方法的形参列表只有一个参数,那么小括号可以省略
//如果方法的方法体只有一行代码,那么大括号可以省略
//如果方法的方法体只有一行代码,并且这行代码是一个输出语句,那么大括号和输出语句都可以省略
method(()->{
System.out.println("我在游泳");
});
}
public static void method(Swim s){
s.swimming();
}
}
interface Swim{
public abstract void swimming();
}
3.省略写法
核心 :可推导可省略。
省略规则:
- 参数类型可以不写
- 如果只有一个参数,参数类型可以省略,同时()也可以省略
- 如果lambda表达式的方法体只有一行,大括号,分号,return可以省略不写,需要同时省略。
package Lambda;
import java.util.Arrays;
import java.util.Comparator;
public class LambdaDemo2 {
public static void main(String[] args) {
Integer[] arr = {2,3,1,5,6,7,4,8,9};
// 匿名内部类的形式
Arrays.sort(arr,new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
// Lambda完整格式
// (参数列表) -> {方法体}
Arrays.sort(arr,(Integer o1,Integer o2)->{
return o1 - o2;
});
// Lambda简化格式
// 如果方法的形参列表只有一个参数,那么小括号可以省略
// 如果方法的方法体只有一行代码,那么大括号可以省略
// 如果方法的方法体只有一行代码,并且这行代码是一个输出语句,那么大括号和输出语句都可以省略
Arrays.sort(arr,(o1,o2)->o1 - o2);
System.out.println(Arrays.toString(arr));
}
}