集合进阶(泛型、泛型通配符、数据结构(二叉树、平衡二叉树、红黑树

本文主要是介绍集合进阶(泛型、泛型通配符、数据结构(二叉树、平衡二叉树、红黑树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、泛型类、泛型方法、泛型接口

1、泛型概述

泛型:是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。
泛型的格式:<数据类型>
注意:泛型只能支持引用数据类型。

 

泛型的好处

1、统一数据类型。
2、把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为在编译阶段类型就能确定下来。

泛型的细节

  • 泛型中不能写基本数据类型
  • 指定泛型的具体类型后,传递数据时,可以传入该类类型或者其子类类型
  • 如果不写泛型,类型默认是0bject

2、泛型类

3、泛型方法 

4、泛型方法的练习

定义一个工具类:ListUtil
类中定义一个静态方法addAll,用来添加多个集合的元素。

5、泛型接口 

二、泛型通配符和综合练习 

1、泛型的继承和通配符

  • 泛型不具备继承性,但是数据具备继承性

 2、练习——定义一个继承类

Animal

Cat

波斯猫

狸花猫

Dog

 

泰迪

哈士奇

text类 

3、总结

二、数据结构(二叉树、二叉查找树、平衡二叉树)

1、数据结构(树)

2、数据结构(二叉查找树)

①添加节点规则:

小的左边大的右边,一样的不存

3、数据结构(二叉树)遍历方式

①前序遍历:当前节点,左子节点,右子结点


②中序遍历:左子节点,当前节点,右子结点


③后序遍历:左子节点,右子结点,当前节点


④层序遍历:一层一层的去遍历

4、数据结构(平衡二叉树)

5、数据结构(平衡二叉树)需要旋转的四种情况

①左左:一次右旋


②左右:先局部左旋,再整体右旋


③右右:一次左旋


④右左:先局部右旋,再整体左旋 

6、数据结构(平衡二叉树)小结 

  • 在平衡二叉树中,如何添加节点?

小的在左边,大的在右边,一样的不存

  • 在平衡二叉树中,如果查找单个节点?

先跟根节点对比,小的在左,大的在右,依次比较

  • 为什么要旋转?

普通二叉树和二叉查找树不需要旋转,到目前为止只有平衡二叉树才需要旋转;

红黑树也需要旋转

旋转的目的:当添加了一个结点之后,导致这棵树不平衡了,那么需要旋转让这棵树重新保持平衡

  • 旋转的触发时机?

当成功添加了一个结点之后,破坏了这个平衡,就需要进行旋转

三、数据结构(红黑树、红黑规则、添加节点处理方案详解)

红黑树增删改查的性能都很好 

1、数据结构(红黑树)

2、⭐⭐数据结构(红黑树)红黑规则

3、数据结构(红黑树)添加节点的规则

——红黑树在添加节点的时候,添加的节点默认是红色的(效率高)

这篇关于集合进阶(泛型、泛型通配符、数据结构(二叉树、平衡二叉树、红黑树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059923

相关文章

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。