泛型和数据结构(树)

news2024/11/25 8:10:26

一:泛型的基本知识

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

基本格式:<数据类型>

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

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

我们发现此时里面是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.coloradmin.cn/o/1274370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ArcGIS Pro二次开发】(78):批量合并GDB数据库

有些GDB数据库会按分幅或行政区划进行分开储存&#xff0c;尤其是一些地形测绘或国情地理数据。 如下图所示&#xff1a; 数据是完整的&#xff0c;但使用的时候要一个一个拖进地图中&#xff0c;进行分析的时候也需要将其合并后使用。 因此就做了这个合库工具。 一、要实现的…

万界星空科技仓库管理wms系统

企业在管理库存时&#xff0c;尤其是生产制造企业&#xff0c;使用传统方式比如纸笔、Excel 管理库存&#xff0c;由于工具和信息化存在局限&#xff0c;导致在管理库存时出现如下问题&#xff1a; 1、通过纸笔记录出入库申请&#xff0c;人为手动计算易出错&#xff0c;数据易…

[iOS学习笔记]浅谈RunLoop底层

RunLoop是什么&#xff1f; RunLoop是iOS开发中比较重要的知识点&#xff0c;它贯穿程序运行的整个过程。它是线程基础架构的一部分&#xff0c;是一种保障线程循环处理事件而不会退出的机制。同时也负责管理线程需要处理的事件&#xff0c;让线程有事儿时忙碌&#xff0c;没事…

键盘敲入一个字母,操作系统发生了什么?

一、设备控制器 我们的电脑设备可以接非常多的输入输出设备&#xff0c;比如鼠标键盘网卡硬盘打印机等&#xff0c;每个设备的用法和功能都不相同&#xff0c;那操作系统是如何把这些输入输出设备统一管理的呢&#xff1f; 为了屏蔽设备之间的差异&#xff0c;每个设备都有一…

rest_framework_django学习笔记一(序列化器)

rest_framework_django学习笔记一(序列化器) 一、引入Django Rest Framework 1、安装 pip install djangorestframework2、引入 INSTALLED_APPS [...rest_framework, ]3、原始RESTful接口写法 models.py from django.db import models 测试数据 仅供参考 INSERT INTO de…

我与开源的历程

我在2000年开始接触开源&#xff0c;当时在松下航空电子美国总部工作。我负责将 IFE 系统从 Win31 迁移到 Linux。作为一个完全不懂 Linux 的小白&#xff0c;我不得不找到一台笔记本电脑安装并自学 Redhat Linux 6.1。2003年回到新加坡后&#xff0c;我发现没有一个凝聚 Linux…

Java数据结构之《链式线性表的插入与删除》问题

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度中等偏下的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题只要我…

Rust std fs 比 Python 慢!真的吗!?

作者&#xff1a;Xuanwo Databend Labs 成员&#xff0c;数据库研发工程师 https://github.com/xuanwo 我即将分享一个冗长的故事&#xff0c;从 OpenDAL 的 op.read()开始&#xff0c;以一个意想不到的转折结束。这个过程对我来说非常有启发性&#xff0c;我希望你也能感受到。…

记RocketMQ本地开发环境搭建始末

前言 最近工作中涉及到了RocketMQ的应用&#xff0c;为方便开发决定本地搭建一套RocketMQ的使用环境。 果然实践是个好东西... VMware虚拟环境搭建 这个网上有很多教程&#xff0c;只会比我写的详细有条理&#xff0c;这里就不在赘述了。 虚拟机搭建好之后每次重启电脑都无…

flutter开发实战-轮播Swiper更改Custom_layout样式中Widget层级

flutter开发实战-轮播Swiper更改Custom_layout样式中Widget层级 在之前的开发过程中&#xff0c;需要实现卡片轮播效果&#xff0c;但是卡片轮播需要中间大、两边小一些的效果&#xff0c;这里就使用到了Swiper。具体效果如视频所示 添加链接描述 这里需要的效果是中间大、两边…

golang 函数选项模式

一 什么是函数选项模式 函数选项模式允许你使用接受零个或多个函数作为参数的可变构造函数来构建复杂结构。我们将这些函数称为选项&#xff0c;由此得名函数选项模式。 例子&#xff1a; 有业务实体Animal结构体&#xff0c;构造函数NewAnimal&#xff08;&#xff09;&…

Liunx配置Tomcat自启动

Liunx配置Tomcat自启动 Tomcat安装配置Tomcat开机启动 Tomcat安装 下载tomcat软件安装包&#xff0c;上传软件包到Liunx服务器。 解压软件包到opt目录下 tar -xvf apache-tomcat-9.0.76.tar.gz -c /opt配置Tomcat开机启动 &#xff08;1&#xff09;修改Tomcat bin目录下的ca…

vue项目和wx小程序

wx:key 的值以两种形式提供&#xff1a; 1、字符串&#xff0c;代表在 for 循环的 array 中 item 的某个 property&#xff0c;该 property 的值需要是列表中唯一的字符串或数字&#xff0c;且不能动态改变。 2、保留关键字 this 代表在 for 循环中的 item 本身&#xff0c;这种…

学习笔记:Pytorch 搭建自己的Faster-RCNN目标检测平台

B站学习视频 up主的csdn博客 1、什么是Faster R-CNN 2、pytorch-gpu环境配置&#xff08;跳过&#xff09; 3、Faster R-CNN整体结构介绍 Faster-RCNN可以采用多种的主干特征提取网络&#xff0c;常用的有VGG&#xff0c;Resnet&#xff0c;Xception等等。 Faster-RCNN对输入…

ArkTS-列表选择弹窗

调用 每一个sheet中的action对应其点击事件 Button(列表选择弹窗).onClick(() > {ActionSheet.show({title: 列表选择弹窗标题,message: 内容,autoCancel: true,confirm: {value: 确认,action: () > {console.log(Get Alert Dialog handled)}},cancel: () > {console.…

INFINI Easysearch 与华为鲲鹏完成产品兼容互认证

何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务&#xff08;含公有云、私有云、混合云、桌面云&#xff09;推出的一项合作伙伴计划&#xff0c;旨在为构建持续发展、合作共赢的鲲鹏生态圈&#xff0c;通过整合华为的技术、品牌资源&#xff0c;与合作伙伴共享商机和利…

视频分割方法:批量剪辑高效分割视频,提取m3u8视频技巧

随着互联网的快速发展&#xff0c;视频已成为获取信息、娱乐、学习等多种需求的重要载体。然而&#xff0c;很多时候&#xff0c;需要的只是视频的一部分&#xff0c;这就要对视频进行分割。而m3u8视频是一种常见的流媒体文件格式&#xff0c;通常用于在线视频播放。本文将分享…

unity学习笔记13

一、常用物理关节 Unity中的物理关节&#xff08;Physics Joints&#xff09;是用于在游戏中模拟和控制物体之间的连接。物理关节允许你在对象之间应用各种约束&#xff0c;例如旋转、移动或固定连接&#xff0c;以模拟真实世界中的物理交互。 物理关节类型&#xff1a; 1.F…

同旺科技 分布式数字温度传感器 -- OPC Servers测试

内附链接 1、数字温度传感器 主要特性有&#xff1a; ● 支持PT100 / PT1000 两种铂电阻&#xff1b; ● 支持 2线 / 3线 / 4线 制接线方式&#xff1b; ● 支持5V&#xff5e;17V DC电源供电&#xff1b; ● 支持电源反接保护&#xff1b; ● 支持通讯波特率1200bps、2…

spring日志输出到elasticsearch

1.maven <!--日志elasticsearch--><dependency><groupId>com.agido</groupId><artifactId>logback-elasticsearch-appender</artifactId><version>3.0.8</version></dependency><dependency><groupId>net.l…