804笔记---小白学Java

二叉树的存值

当添加新节点时,总是从树的根节点开始比较,即将根节点当成当前节点,如果新增节点大于当前节点且当前节点的右节点存在,则以右节点作为当前节点;如果新增节点小于当前节点且当前节点的左节点存在,则以左节点作为当前节点;如果新增节点等于当前节点,则新增节点覆盖当前节点

在这里插入图片描述

遍历

前序遍历

先访问根结点,然后前序遍历左子树,再前序遍历右子树

根结点 -> 左子树 -> 右子树

结果:20、10、6、15、50、30、78、90

中序遍历

从根节点开始(注意并不是先访问根节点),中序遍历根节点的左子树,然后是访问根节点,最后中序遍历右子树

左子树 -> 根结点 -> 右子树

结果:6、10、15、20、30、50、78、90

后序遍历

从左到右先子叶后结点的方式遍历访问左右子树,最后是访问根节点

从左到右访问叶子结点 -> 根结点

结果:6、15、10、30、90、78、50、20

层次遍历

从树的第一层,也就是根节点开始访问。从上而下逐层遍历。在同一层中,按从左到右的顺序对结点逐个访问

第一层 -> 第二层(从左到右访问结点)-> ··· -> 最后一层(从左到右访问结点)

结果:20、10、50、6、15、30、78、90

如若有错误,请指正,非常感谢

API中Comparator接口的使用

@FunctionalInterface
public interface Comparator<T>

比较功能,对一些对象的集合施加了一个整体排序

示例

  1. 创建一个实体类

    package com.qfedu.demo;
    
    /**
     * @Author pengyu
     * @Date 2022/8/4 10:54
     */
    public class Person {
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    
  2. 创建自己的排序规则:age小的在前

    package com.qfedu.demo;
    
    import java.util.Comparator;
    
    /**
     * @Author pengyu
     * @Date 2022/8/4 10:56
     */
    public class MyComparator implements Comparator<Person> {
        /**
         * 根据age的差值进行比较排序
         * 负数(小),零(相等),正数(大)
         * @param o1
         * @param o2
         * @return
         */
        @Override
        public int compare(Person o1, Person o2) {
            return o1.getAge() - o2.getAge();
        }
    }
    
    
  3. 测试

    package com.qfedu.demo;
    
    import java.util.Set;
    import java.util.TreeSet;
    
    /**
     * @Author pengyu
     * @Date 2022/8/4 10:57
     */
    public class Test01 {
        public static void main(String[] args) {
            Set<Person> set = new TreeSet<>(new MyComparator());
            set.add(new Person("涵涵", 21));
            set.add(new Person("依依", 20));
            set.add(new Person("欣欣", 19));
            //age值一样,TreeSet集合不能存重复值
            set.add(new Person("鱼鱼", 19));
            System.out.println(set);
        }
    }
    
    

内部类

概述:内部类即在一个类中又定义一个类

内部类分类

  1. 成员内部类,类定义在方法外在某个类中
  2. 局部内部类,类定义在方法中
成员内部类(LinkedList的底层有在使用该成员内部类)

语法格式

class 外部类{
    // 成员变量
    // 成员方法
    class 内部类{
        // 成员变量
        // 成员方法
    }
}

示例

package com.qfedu.demo;

/**
 * @Author pengyu
 * @Date 2022/8/4 19:45
 */
class A {
    String name = "卡哇伊";
    int age = 28;

    public void print() {
        System.out.println("打印不了内部类B的属性和方法");
    }

    class B {
        String name = "依依";

        public void say () {
            //打印外部类的属性
            System.out.println(A.this.name);
            System.out.println(A.this.age);
            //打印内部类的属性
            System.out.println(name);
        }
    }
}
public class Demo01 {
    public static void main(String[] args) {
        //我们如何使用成员内部类呢
        
       	//第一种创建格式
        //1.实例化外部类对象
        A a = new A();
        //2.通过外部类对象来创建内部类对象
        A.B b = a.new B();
        b.say();
        
        //第二种创建格式
        //外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
        A.B b1 = new A().new B();
    }
}

控制台输出

卡哇伊
28
依依

说明了内部类可以调用外部类的属性和方法

局部内部类(基本不用)

语法格式

class 外部类名 {
    数据类型 变量名;
    
    修饰符 返回值类型 方法名(参数列表) {
        // …
        class 内部类 {
            // 成员变量
            // 成员方法
        }
    }
}
匿名内部类

本质

  1. 定义没有名字的内部类
  2. 重写方法
  3. 创建没有名字的类的对象

抽象类中使用匿名内部类

package com.qfedu.demo;

/**
 * @Author pengyu
 * @Date 2022/8/4 19:54
 */
abstract class C {
    public abstract void say();
}
public class Demo02 {
    public static void main(String[] args) {
        C c = new C() {
            @Override
            public void say() {
                System.out.println("哈哈哈哈哈哈哈哈哈哈哈");
            }
        };
        c.say();
        
        //控制台输出:哈哈哈哈哈哈哈哈哈哈哈
    }
}

接口中使用匿名内部类

package com.qfedu.demo;

/**
 * @Author pengyu
 * @Date 2022/8/4 20:01
 */
interface D {
    void say();
}
public class Demo03 {
    public static void main(String[] args) {
        new D(){
            @Override
            public void say() {
                System.out.println("我是D");
            }
        }.say();
        
        //控制台打印:我是D
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值