Java SE 进阶 day07

9.泛型

1.泛型介绍:

在JDK5引入的, 可以在编译阶段约束操作的数据类型, 并进行检查

2.泛型的好处

泛型的好处 : 统一数据类型,将运行期的错误提升到了编译期

3.泛型的分类
  • 泛型类

  • 泛型方法

    • 静态方法 : 需要声明出自己独立的泛型

       public static<T> void printArr(T[] arr){
              System.out.print("[");
              for (int i = 0; i < arr.length -1; i++) {
                  System.out.print(arr[i] + " ,");
              }
      
    • 非静态方法 : 根据类的泛型去匹配

      public class ArrayList<E> {
      
          public boolean add(E e) {
          }
      }
      
  • 泛型接口

    • 类实现接口的时候,直接确定类型
    • 延续接口的泛型,等创建对象的时候再确定
  • 泛型通配符

    • ? (任意类型)

    • ? extends E (只能接收 E 或者是 E 的子类)

    • ? super E (只能接收 E 或者是 E 的父类)

10.数据结构----树

1.树的介绍
  1. 每一个节点有零个或者多个子节点
  2. 没有父节点的节点称之为根节点,一个树最多有一个根节点。
  3. 每一个非根节点有且只有一个父节点
2.二叉树
  1. 二叉树

    如果树中的每个节点的子节点的个数不超过2,那么该树就是一个二叉树。

  2. 二叉查找树

    • 二叉查找树的特点:

      左子树上所有的节点的值均小于等于他的根节点的值

      右子树上所有的节点值均大于或者等于他的根节点的值

      每一个子节点最多有两个子树

    • 目的:提高检索数据的性能

    • 弊端:
      二叉查找树有可能会出现"瘸子"的现象,影响查询效率。

  3. 二叉平衡树

    • 平衡二叉树是在满足查找二叉树的大小规则下,让树尽可能矮小,以此提高查数据的性能

    • 要求:
      任意节点的左右两个子树的高度差不超过1
      任意节点的左右两个子树都是一颗平衡二叉树

    • 旋转:

      在构建一棵平衡二叉树的过程中
      当有新的节点要插入进来以后
      我们需要校验新节点的插入是否破坏了树的这种平衡结构,
      如果是,则需要对树做调整,以改变树的结构
      让其成为一个平衡二叉树;而调整就需要涉及到树的旋转

    • 旋转的四种情况

    • 请添加图片描述

3.红黑树
  1. 介绍

    一种平衡二叉树,是通过红黑规则实现平衡,所以红黑树不是高度平衡的二叉树

  2. 红黑规则

    • 每一个节点是红色的,或者是黑色的,根节点必须是黑色。
    • 如果一个节点没有子节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,叶节点是黑色的。
    • 如果某一个节点是红色,那么它的子节点必须是黑色
      (不能出现两个红色节点相连的情况)。
    • 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
  3. 红黑树节点添加规则

请添加图片描述

  1. 红黑树的核心

    • 根节点是黑色
    • 红色的不能连一起
    • 从任意节点开始, 走到叶子节点 , 左右两边的黑色点数, 需要一致

11.TreeSet

1.介绍

Set集合的一种,底层原理是红黑树,可以对数据进行去重和排序

2.排序
  1. 让类实现 Comparable接口, 重写 compareTo 方法
  2. 在构造方法里, 传入Comparator , 重写 compare 方法(比较器)
  3. 如果同时指定两种排序方式,优先用比较器的排序方式
3.注意事项

如果存储的是自定义对象, 还没有实现过 Comparable 接口,运行的时候, 将会出现 ClassCastException
tor , 重写 compare 方法(比较器)
3. 如果同时指定两种排序方式,优先用比较器的排序方式

3.注意事项

如果存储的是自定义对象, 还没有实现过 Comparable 接口,运行的时候, 将会出现 ClassCastException

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值