泛型和数据结构(树)

一:泛型的基本知识

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

基本格式:<数据类型>

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

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

我们发现此时里面是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.对于每个节点,从该节点到他所有后代叶节点的简单路径上,均包含相同数目的黑色节点 

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

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

添加节点

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/236441.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第16届中国R会议暨2023X-AGI大会开幕,和鲸科技分享ModelOps在数据科学平台中的实践与应用

11月25日&#xff0c;第 16 届中国 R 会议暨 2023 X-AGI 大会在在中国人民大学逸夫会堂拉开帷幕&#xff0c;本次会议由中国人民大学统计学院、中国人民大学应用统计科学研究中心、统计之都、原灵科技和中国商业统计学会人工智能分会&#xff08;筹&#xff09;主办&#xff0c…

Abbyy FineReader16最新版本有哪些新功能?

在数字化时代&#xff0c;数据处理和转换变得非常重要&#xff0c;Abbyy FineReader 就是一款专门用于处理、转换和识别图像和 PDF 文件的软件。在本文中&#xff0c;我们将会详细介绍 Abbyy FineReader 的功能以及适合使用该软件的电脑。 ABBYY Finereader 16-安装包下载如下&…

使用 JDBC 连接 Neo4j(头歌)

文章目录 第1关&#xff1a;连接 Neo4j &#xff08;JDBC&#xff09;任务描述相关知识完成 JDBC 环境设置连接 Neo4j 对数据进行查询 编程要求测试说明答案测试前准备代码文件 第1关&#xff1a;连接 Neo4j &#xff08;JDBC&#xff09; 任务描述 本关任务&#xff1a;使用…

【字符函数和字符串函数】

目录 字符分类函数字符转换函数strlen的使用和模拟实现strcpy的使用和模拟实现strcat的使用和模拟实现strcmp的使用和模拟实现strncpy的使用strncat的使用strncmp的使用strstr的使用和模拟实现strtok的使用strerror的使用字符串匹配优化-KMP算法 在编程的过程中,经常要处理字符…

什么是透明加密技术?透明加密有哪些优势?

透明加密技术是一种特殊的加密方法&#xff0c;它在用户毫不知情的情况下对数据进行加密和解密&#xff0c;保障了数据的安全性。用户在使用这种加密技术时&#xff0c;无需改变他们的日常操作习惯&#xff0c;加密和解密过程在后台自动进行&#xff0c;使得用户在享受数据安全…

基于springboot-“有光”摄影分享网站系统(2023年☆全网唯一)【附源码|数据库|表结构|万字文档(LW)|技术文档|说明文档】

主要功能 前台登录&#xff1a; 注册用户&#xff1a;用户账号、密码、姓名、手机号、身份证号、性别、邮箱 用户&#xff1a; ①首页、公告资讯展示、图片素材展示、活动展示、视频素材展示、查看更多 ②论坛、发布帖子、活动、活动标题、活动类型、公告资讯、公告标题、公告…

[原创][3]探究C#多线程开发细节-“用ConcurrentQueue<T>解决多线程的无顺序性的问题“

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

金蝶Apusic应用服务器 任意文件上传漏洞复现

0x01 产品简介 金蝶Apusic应用服务器&#xff08;Apusic Application Server&#xff0c;AAS&#xff09;是一款标准、安全、高效、集成并具丰富功能的企业级应用服务器软件&#xff0c;全面支持JakartaEE8/9的技术规范&#xff0c;提供满足该规范的Web容器、EJB容器以及WebSer…

STM32F407-14.3.7-01PWM输入模式

PWM 输入模式 此模式是输入捕获模式的一个特例。其实现步骤与输入捕获模式基本相同&#xff0c;仅存在以下不同之处&#xff1a; 例如&#xff0c;可通过以下步骤对应用于 TI1① 的 PWM 的周期&#xff08;位于 TIMx_CCR1⑨ 寄存器中&#xff09;和占空 比&#xff08;位于 …

rabbitmq消息队列实验

实验目的&#xff1a;实现异步通信 实验条件&#xff1a; 主机名 IP地址 组件 test1 20.0.0.10 rabbitmq服务 test2 20.0.0.20 rabbitmq服务 test3 20.0.0.30 rabbitmq服务 实验步骤&#xff1a; 1、安装rabbitmq服务 2、erlang进入命令行&#xff0c;查看版本 …

IDEA导入JavaWeb项目(非Maven)

IDEA导入JavaWeb(非Maven)项目教程 运行教程 亲爱的粉丝们&#xff0c;我深知你们对IDEA导入JAVAWeb工程的迫切需求。在这个充满竞争的时代&#xff0c;每一个项目都离不开高效的沟通。过程中需要对应的环境适配和软件…

提升Jmeter测试效率的9种参数化方法!

jmeter工具无论做接口测试还是性能测试&#xff0c;参数化都是一个必须掌握且非常有用的知识点。参数化的使用场景: 1&#xff09;多个请求都是同一个ip地址&#xff0c;若服务器地址更换了&#xff0c;则脚本需要更改每个请求的ip 2&#xff09;注册账号&#xff0c;不允许账…