目录
冒泡排序的思想:每次从数组中找出最大值放在数组的后面去。
实现冒泡排序的关键步骤:
1.确定总共需要做几轮: 数组的长度-1。
2.每轮比较几次:

3.当前位置大于后一个位置则交换数据。

代码如下:
- import java.util.Arrays;
-
- public class Test3 {
- public static void main(String[] args) {
- int[] arr = {2,33,5,7,9,10};
- bubbleSort(arr);
- System.out.println(Arrays.toString(arr));
- }
- // 2 33 5 7 9 10
- // 0 1 2 3 4 5
- public static void bubbleSort(int[] arr ){
- for (int i = 0; i < arr.length-1; i++) {
- for (int j = 0; j < arr.length-1-i; j++) {
- if (arr[i]>arr[i+1]) {
- int temp = arr[i];
- arr[i] = arr[i+1];
- arr[i+1] = temp;
- }
- }
- }
- }
- }
选择排序的思想:每轮选择当前位置,开始找出后面的较小值与该位置交换。
选择排序的关键:确定总共需要选择几轮: 数组的长度-1,控制每轮从以前位置为基准,与后面元素选择几次。

- import java.util.Arrays;
-
- /**
- 目标:学会使用选择排序的方法对数组进行排序。
- */
- public class Test1 {
- public static void main(String[] args) {
- // 1、定义数组
- int[] arr = {5, 1, 3, 2};
- // 0 1 2 3
-
- // 2、定义一个循环控制选择几轮: arr.length - 1
- for (int i = 0; i < arr.length - 1; 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));
- }
- }
二分查找:
二分查询性能好,二分查找的前提是必须是排好序的数据。
二分查找相当于每次去掉一半的查找范围。

结论:二分查找正常的检索条件应该是开始位置min <= 结束位置max。
数组的二分查找的实现步骤是什么样的?
1.定义变量记录左边和右边位置。
2.使用while循环控制查询(条件是左边位置<=右边位置)
3.循环内部获取中间元素索引
4.判断当前要找的元素如果大于中间元素,左边位置=中间索引+1
5.判断当前要找的元素如果小于中间元素,右边位置=中间索引-1
6.判断当前要找的元素如果等于中间元素,返回当前中间元素索引。
- /**
- 目标:理解二分搜索的原理并实现。
- */
- public class Test2 {
- public static void main(String[] args) {
- // 1、定义数组
- int[] arr = {10, 14, 16, 25, 28, 30, 35, 88, 100};
- // r
- // l
- //
- System.out.println(binarySearch(arr , 35));
- System.out.println(binarySearch(arr , 350));
- }
- /**
- * 二分查找算法的实现
- * @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表达式是JDK 8开始后的一种新语法形式。
作用:简化匿名内部类的代码写法。
Lambda表达式的简化格式

注意:Lambda表达式只能简化函数式接口的匿名内部类的写法形式。
什么是函数式接口?
首先必须是接口、其次接口中有且仅有一个抽象方法的形式。
- public class LambdaDemo2 {
- public static void main(String[] args) {
- // 目标:学会使用Lambda的标准格式简化匿名内部类的代码形式
- // 注意:Lambda只能简化接口中只有一个抽象方法的匿名内部类形式(函数式接口)
- // Swimming s1 = new Swimming() {
- // @Override
- // public void swim() {
- // System.out.println("老师游泳贼溜~~~~~");
- // }
- // };
-
- // Swimming s1 = () -> {
- // System.out.println("老师游泳贼溜~~~~~");
- // };
-
- Swimming s1 = () -> System.out.println("老师游泳贼溜~~~~~");
- go(s1);
-
- System.out.println("---------------------");
- // go(new Swimming() {
- // @Override
- // public void swim() {
- // System.out.println("学生游泳很开心~~~");
- // }
- // });
-
- // go(() ->{
- // 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();
- }
1.Lambda表达式的基本作用?
简化函数式接口的匿名内部类的写法。
2.Lambda表达式有什么使用前提?
必须是接口的匿名内部类,接口中只能有一个抽象方法。
注意:通常我们见到的函数式接口上都有一个@FunctionalInterface注解,标记该接口必须是满足函数式接口。
Lambda表达式的省略写法(进一步在Lambda表达式的基础上继续简化)
1.参数类型可以省略不写。
2.如果只有一个参数,参数类型可以省略,同时()也可以省略。
3.如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!
4.如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写
- 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 o2 - o1; // 降序
- // }
- // });
-
- // Arrays.sort(ages1, (Integer o1, Integer o2) -> {
- // return o2 - o1; // 降序
- // });
-
-
- // Arrays.sort(ages1, ( o1, o2) -> {
- // return o2 - o1; // 降序
- // });
-
- Arrays.sort(ages1, ( o1, o2 ) -> o2 - o1 );
-
- 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);
- }
- }