目录

java后端开发day30-常见算法二-Arrayslambda

java后端开发day30–常见算法(二)——-Arrays&lambda

https://i-blog.csdnimg.cn/direct/d8399f21ce284ce286946332efd034d4.png#pic_center

(以下内容全部来自上述课程)

1.Arrays

操作数组的工具类。

https://i-blog.csdnimg.cn/direct/143ba739d2d84958bd05af385a98a393.jpeg

细节:

  • copyOf:新长度<老长度—-部分拷贝,新长度=老长度—-完全拷贝,新长度>老长度—-会补上默认初始值

  • copyOfRange:包头不包尾,包左不包右

  • sort1:给 基本 数据类型进升序排列

    底层原理:快速排序

  • sort2:给 引用 数组类型进行排序,基本需变包装类

    底层原理:插入排序+二分查找

2.Lambda表达式

简化代码

https://i-blog.csdnimg.cn/direct/863d91a2a9e742e9b7a3628b86318b04.jpeg

1.函数式编程

一种思想特点。

忽略面向对象的复杂语法,强调做什么,而不是谁去做。

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

https://i-blog.csdnimg.cn/direct/41a85d1af8a4486d9c4943de6f181591.jpeg

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.省略写法

核心 :可推导可省略。

省略规则:

  1. 参数类型可以不写
  2. 如果只有一个参数,参数类型可以省略,同时()也可以省略
  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));
    }
}