泛型和数据结构(树)

一:泛型的基本知识

泛型是用来约束操作的数据类型,并进行检查

基本格式:<数据类型>

注意:泛型只能支持引用数据类型,如果是基本数据类型,需要写他的包装类

先来看一下没有泛型约束的集合

我们发现此时里面是Object类 也就是说可以添加所有类型的数据

       但是这样获取集合的每一个元素就会出现问题,无法使用子类的特有问题,如果强制类型转换就会出现转换会出现转换异常

        这样泛型的作用就能够体现出来

但是Java的泛型是伪泛型(因为泛型的概念是JDK5之后提出的)

泛型的擦除:Java文件到class文件时 就失去了泛型这一概念

所以对于一个集合<String>只是在添加进去会检查是否为 String 进入集合里面还是Object类

元素被调用出去集合就还是String。

泛型的细节:

1.泛型里面不能写基本数据类型(因为最终总是转成Object 基本数据类型转不了)

2.指定泛型的类型之后,可以传递该类类型或者他的子类类型的。

3.如果不写泛型,类型就是默认Object类

二:泛型在不同位置进行定义

如果写在类的后面   叫做泛型类

            方法的后面   叫做泛型方法

            接口的后面    叫做泛型接口

<1>泛型类

使用场景:当一个类中,某个变量的数据类型不确定时,就可以定义带有泛型的类

此处的E可以理解为变量,但是不是用来记录数据的,而是记录数据的类型,可以写成T,E,K,V

举例

<2>泛型方法

使用场景:方法的形参类型不确定时,可以使用类名后面定义的泛型<E>

举例

<3>泛型接口

使用场景:当一个接口中,某个变量的数据类型不确定时,就可以定义带有泛型的接口

格式

两种使用方式

1.实现类给出具体的类型(实现类确定类型)

给出之后类型就确定了

2.实现类也不明确(实现类也不明确类型)

<4>泛型的继承和通配符

泛型不具备继承性,数据具备继承性

通配符

? 表示所有的类型

? extends E 表示可以传递E或者E所有的子类类型

? super E     表示可以传递E或者E所有的父类类型

应用场景:如果类型不确定,但是我们知道以后只能传递某个继承的体系结构中的,就可以使用泛型的通配符

关键点:限定类型的范围

三:数据结构(树)

树里面的每一个元素叫做节点(Node)

对于一个节点来讲

度:每个节点的子节点的数量

二叉树中,任意节点的度<=2。

树高:树的总层数

根节点:最顶层的节点

对于18及18以下的结构叫做根节点的左子树

对于26及26以下的结构叫做根节点的右子树

<1>二叉查找树

特点:

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

任意一个节点的左子树上的值小于该节点

任意一个节点的右子树上的值大于该节点

四种遍历方式:

前序遍历:从根子节点开始,当前节点,左子节点,右子节点的顺序

20  18   16   19   23    22    24

中序遍历(重点):从根子节点开始,左子节点,当前节点,右子节点的顺序

16  18  19  20  22  23  24(从小到大)

后序遍历:从根子节点开始,左子节点,右子节点,当前节点的顺序

16  19  18  22  24  23  20

 层序遍历:从根开始,一层一层,从左到右

20  18  23  16  19  22  24

<2>平衡二叉树

任意节点左右子树高度差不超过1

那么平衡二叉树是如何保持“平衡”的呢?

旋转机制

当添加一个节点之后,该树不再是一颗平衡二叉树,就会触发旋转机制

有左旋转和右旋转

左旋转

案例一

添加了12导致不平衡

案例二

 右旋转(反过来的左旋转)

案例一

案例二

<3>红黑树

是一个二叉查找树

但是不是高度平衡的具有特殊的红黑规则

红黑规则

1.每个节点要么是红色,要么是黑色

2.根节点一定是黑色

3.如果一个节点没有子节点或者父节点,则该节点相应的指针属性为Nil,这些Nil视为叶节点(均是黑色)

4.如果某个节点是红色他的子节点一定是黑色(不能出现两个红色相连的情况)

5.对于每个节点,从该节点到他所有后代叶节点的简单路径上,均包含相同数目的黑色节点 

简单路径:一直走,不回头

对于红黑树的节点会多出一个颜色的属性

添加节点

默认是红色的(效率会更高)

对于红黑树来讲:增删查改效果更好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨小瑾的鸭舌帽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值