JavaSE基础进阶学习day08

常见算法

一.选择排序

1选择排序的思想:每轮选择当前位置,开始找出后面的较小值与该位置交换

2选择排序的关键:

(1)确定总共需要选择几轮:数组的长度-1
(2)控制每轮从以前位置为基准,与后面元素选择几次

package com.itheima.d8_sort_binarysearch;

import java.util.Arrays;

/**
 * 目标:学会使用选择排序的方法对数组进行排序
 */
public class Test1 {
    public static void main(String[] args) {
        //1定义数组
        int[] arr = {5 , 1 , 3 , 2};

        //定义一个循环控制选择几轮:arr.length - 1
        for (int i = 0; i < arr.length; i++) {
            //i = 0     j = 1 2 3
            //i = 1     j = 2 3
            //i = 2     j = 3
            //3定义内部循环控制选择几次
            for (int j = i + 1; j < arr.length; j++) {
                //当前位:arr[i]
                //如果有比当前位数据更小的,则交换
                if (arr[i] > arr[j]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }


}

二.二分查找

1二分查找特性

(1)二分查询性能好,二分查找的前提是必须是排好序的数据

(2)二分查找相当于每次去掉一半的查找范围

2二分查找---元素不存在

结论:二分查找正常的检索条件应该是开始位置min <= 结束位置max

3总结:数组的二分查找的实现步骤是什么样的?
(1)定义变量记录左边和右边位置。
(2)使用while循环控制查询(条件是左边位置<=右边位置)
(3)循环内部获取中间元素索引
(4)判断当前要找的元素如果大于中间元素,左边位置=中间索引+1
(5)判断当前要找的元素如果小于中间元素,右边位置=中间索引-1
(6)判断当前要找的元素如果等于中间元素,返回当前中间元素索引

package com.itheima.d8_sort_binarysearch;


/**
 * 目标:理解二分搜索的原来并实现
 */
public class Test2 {
    public static void main(String[] args) {


        //1定义数组
        int[] arr = {10, 14, 16, 25, 28, 30, 35, 88, 100};
        System.out.println(binarySearch(arr, 35));
    }

        /**
         * 二分查找的实现
         * @param arr   排序数组
         * @param data  要找的数据
         * @return 返回的索引,如果元素不存在,直接返回-1
         */

        public static int binarySearch(int[] arr , int data){
            //1定义左边位置 右边位置
            int left = 0;
            int right = arr.length - 1;

            //2开始循环,折半查询
            while (left <= right) {
                //取中间索引
                int middleIndex = (left + right) / 2;
                //3判断当前中间位置的元素和要找的元素的大小情况
                if (data > arr[middleIndex]) {
                    //往右边找,左边位置更新为 = 中间索引+1
                    left = middleIndex + 1;
                } else if (data < arr[middleIndex]) {
                    //往左边找,右边位置 = 中间索引-1
                    right = middleIndex - 1;
                } else {
                    return middleIndex;
                }
            }
            return -1;//查无此元素
        }

}

Lambda表达式

一Lambda概述

1Lambda的概述:

(1)Lambda表达式是JDK 8开始后的一种新语法形式

(2)作用:简化匿名内部类的代码写法

2Lambda表达式的简化格式
(匿名内部类被重写方法的形参列表)->{
        被重写方法的方法体代码。
}
注:->是语法形式,无实际含义

3注意:Lambda表达式只能简化函数式接口的匿名内部类的写法形式

4什么事函数式接口?
(1)首先必须是接口,其次接口中有且仅有一个抽象方法的形式
(2)通常我们会在接口上加上一个@Functionallnterface注解,标记该接口必须是满足函数式接口

5总结
(1)Lambda表达式的基本作用?
                (I)简化函数式接口的匿名内部类的写法
(2)Lambda表达式有什么使用前提?
                (I)必须是接口的匿名内部类,接口中只能有一个抽象方法
(3)Lambda的好处?
                (I)Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,           它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到           提升。

package com.itheima.d9_lambda;

public class LambdaDemo2 {
    public static void main(String[] args) {
        //目标:学会使用Lambda的标准格式简化匿名内部类的代码形式
        //Lambda只能简化接口中只有一个抽象方法的匿名内部类形式
        /*Swimming s1 = new Swimming() {
            @Override
            public void swim() {
                System.out.println("老师游泳贼溜~~~");
            }
        };
        go(s1);*/


        Swimming s1 = () ->{
            System.out.println("老师游泳贼溜~~~");
        };
        /*go(s1);
        System.out.println("-----------------");
        go(new Swimming() {
            @Override
            public void swim() {
                System.out.println("学生游泳很开心~~~");
            }
        });*/

        go(() ->{
                System.out.println("学生游泳很开心~~~");
        });
    }





    public static void go(Swimming s){
        System.out.println("开始.....");
        s.swim();
        System.out.println("结束.....");
    }
}

@FunctionalInterface //一旦加上这个注解必须是函数式接口,里面只能有一个抽象方法
interface Swimming{
    void swim();
}
package com.itheima.d9_lambda;

public class LambdaDemo1 {
    public static void main(String[] args) {
        //目标:学会使用Lambda的标准格式简化匿名内部类的代码形式
        Animal a = new Animal() {
            @Override
            public void run() {
                System.out.println("乌龟跑的很慢!");
            }
        };
        a.run();
    }
}

abstract class Animal{
    public abstract void run();
}

二.Lambda实战-简化常见函数式接口

package com.itheima.d9_lambda;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Comparator;

public class LambdaDemo3 {
    public static void main(String[] args) {
        Integer[] ages1 = {34 , 12 , 42 , 23};
        /**
         * 参数一:被排序的数组必须是引用类型的元素
         * 参数而:匿名内部类对象,代表一个比较器对象
         */
        /*Arrays.sort(ages1, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;//降序
            }
        });*/

        Arrays.sort(ages1, (Integer o1, Integer o2) -> {
                return o1 - o2;//降序
        });
        System.out.println(Arrays.toString(ages1));

        System.out.println("-----------------------");
        JFrame win = new JFrame("登录界面");

        JButton btn = new JButton("我是一个很大的按钮");
        /*btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("有人点我,点我,点我");
            }
        });*/

        btn.addActionListener((ActionEvent e) -> {
                System.out.println("有人点我,点我,点我");

        });

        win.add(btn);
        win.setSize(400 , 300);
        win.setVisible(true);
    }
}

三.Lambda表达式的省略规则

1Lambda表达式的省略写法(进一步在Lambda表达式的基础上继续简化)
(1)参数类型可以省略不写
(2)如果只有一个参数,参数类型可以省略,同时()也可以省略
(3)如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!
(4)如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略“;”不写

package com.itheima.d9_lambda;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Comparator;

public class LambdaDemo3 {
    public static void main(String[] args) {
        Integer[] ages1 = {34 , 12 , 42 , 23};
        /**
         * 参数一:被排序的数组必须是引用类型的元素
         * 参数而:匿名内部类对象,代表一个比较器对象
         */
        /*Arrays.sort(ages1, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;//降序
            }
        });*/

        /*Arrays.sort(ages1, (Integer o1, Integer o2) -> {
            return o1 - o2;//降序
        });*/

        Arrays.sort(ages1, ( o1, o2) -> {
            return o1 - o2;//降序
        });

        Arrays.sort(ages1, ( o1, o2) -> o1 - o2);

        System.out.println(Arrays.toString(ages1));

        System.out.println("-----------------------");
        JFrame win = new JFrame("登录界面");

        JButton btn = new JButton("我是一个很大的按钮");
        /*btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("有人点我,点我,点我");
            }
        });*/

        btn.addActionListener((ActionEvent e) -> {
                System.out.println("有人点我,点我,点我");
        });

        btn.addActionListener(( e) -> {
            System.out.println("有人点我,点我,点我");
        });

        btn.addActionListener( e -> {
            System.out.println("有人点我,点我,点我");
        });

        btn.addActionListener( e -> System.out.println("有人点我,点我,点我"));

        win.add(btn);
        win.setSize(400 , 300);
        win.setVisible(true);
    }
}

教学视频资源来自

Java入门基础视频教程,java零基础自学首选黑马程序员Java入门教程(含Java项目和Java真题)_哔哩哔哩_bilibili

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值