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.树的介绍
- 每一个节点有零个或者多个子节点
- 没有父节点的节点称之为根节点,一个树最多有一个根节点。
- 每一个非根节点有且只有一个父节点
2.二叉树
-
二叉树
如果树中的每个节点的子节点的个数不超过2,那么该树就是一个二叉树。
-
二叉查找树
-
二叉查找树的特点:
左子树上所有的节点的值均小于等于他的根节点的值
右子树上所有的节点值均大于或者等于他的根节点的值
每一个子节点最多有两个子树
-
目的:提高检索数据的性能
-
弊端:
二叉查找树有可能会出现"瘸子"的现象,影响查询效率。
-
-
二叉平衡树
-
平衡二叉树是在满足查找二叉树的大小规则下,让树尽可能矮小,以此提高查数据的性能
-
要求:
任意节点的左右两个子树的高度差不超过1
任意节点的左右两个子树都是一颗平衡二叉树 -
旋转:
在构建一棵平衡二叉树的过程中
当有新的节点要插入进来以后
我们需要校验新节点的插入是否破坏了树的这种平衡结构,
如果是,则需要对树做调整,以改变树的结构
让其成为一个平衡二叉树;而调整就需要涉及到树的旋转 -
旋转的四种情况
-
3.红黑树
-
介绍
一种平衡二叉树,是通过红黑规则实现平衡,所以红黑树不是高度平衡的二叉树
-
红黑规则
- 每一个节点是红色的,或者是黑色的,根节点必须是黑色。
- 如果一个节点没有子节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,叶节点是黑色的。
- 如果某一个节点是红色,那么它的子节点必须是黑色
(不能出现两个红色节点相连的情况)。 - 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
-
红黑树节点添加规则
-
红黑树的核心
- 根节点是黑色
- 红色的不能连一起
- 从任意节点开始, 走到叶子节点 , 左右两边的黑色点数, 需要一致
11.TreeSet
1.介绍
Set集合的一种,底层原理是红黑树,可以对数据进行去重和排序
2.排序
- 让类实现 Comparable接口, 重写 compareTo 方法
- 在构造方法里, 传入Comparator , 重写 compare 方法(比较器)
- 如果同时指定两种排序方式,优先用比较器的排序方式
3.注意事项
如果存储的是自定义对象, 还没有实现过 Comparable 接口,运行的时候, 将会出现 ClassCastException
tor , 重写 compare 方法(比较器)
3. 如果同时指定两种排序方式,优先用比较器的排序方式
3.注意事项
如果存储的是自定义对象, 还没有实现过 Comparable 接口,运行的时候, 将会出现 ClassCastException