【系统学习】2-Java进阶知识总结-3-集合-1-补充【泛型、树、数据结构】

文章目录

  • 泛型
    • 什么是泛型?
    • 常见的泛型标识符
    • 泛型类
    • 泛型方法
    • 泛型接口
    • 通配符
    • 树的基本概念
    • 什么是二叉树?
    • 二叉树--普通二叉树
    • 二叉树--二叉查找树
      • 定义规则
      • 优缺点
    • 二叉树--平衡二叉树
      • 定义规则
      • 旋转机制
    • 二叉树--红黑树
      • 定义规则
      • 红黑规则
  • 常见数据结构
    • 总体特点
    • 结构图

泛型

什么是泛型?

含义的理解还不够深入

泛型:指广泛的数据类型

本质:是参数化类型,即操作的数据类型被指定为一个参数。

用途:泛型可以用在类、接口、方法中,分别称为:泛型类、泛型接口、泛型方法。

版本信息:于JDK5版本引入

常见的泛型标识符

ETKVN
ElementTypeKeyValueNumber通配符
集合元素表示任意Java类的类型键类型值类型数值类型表示任意类型
  • 通配符?:可以理解为所有类的父类

泛型类

示例

package com.itheima.day10.generics;import java.util.ArrayList;public class GenericsDemo2 {public static void main(String[] args) {Student<Integer> stu = new Student<>(); // 正确Student<int> stu = new Student<>();   // 错误,泛型类只能是引用数据类型}
}class Student<E> {private E e;public E getE() {return e;}public void setE(E e) {this.e = e;}
}

特点

  • 泛型类只能写引用数据类型!!
  • 泛型类,只有创建对象的时候,才能确定泛型具体的类型

泛型方法

非静态的泛型方法

特点:根据类的泛型去匹配:类的泛型传入什么类型,方法就传入什么类型

泛型类型确定的时机:类创建实例对象的时候

举例:上述的get()set()方法

静态的泛型方法

特点:必须声明出自己独立的泛型

  • 因为:静态方法随着类的加载而加载,此时类还没创建,就没有具体类型,静态方法就会有问题,所以要声明自己独立的泛型

泛型类型确定的时机:该方法被调用的时候

举例:

package com.itheima.day10.generics;public class GenericsDemo3 {public static void main(String[] args) {String[] arr1 = {"张三", "李四", "王五"};Integer[] arr2 = {11, 22, 33};Double[] arr3 = {11.1, 22.2, 33.3};printArray(arr1);printArray(arr2);printArray(arr3);}public static <T> void printArray(T[] arr) {System.out.print("[");for (int i = 0; i < arr.length - 1; i++) {System.out.print(arr[i] + ", ");}System.out.println(arr[arr.length - 1] + "]");}
}

泛型接口

特点:类实现接口的时候,可以有两种选择:确定泛型类型;保留泛型类型

interface Inter<E> {void show(E e);
}

示例1:类实现接口的时候,直接确定类型(就变成普通类了)

class InterAImpl implements Inter<String> {@Overridepublic void show(String s) {}
}

示例2:延续接口的泛型,等创建对象的时候确定(变成泛型类)

class InterBImpl<E> implements Inter<E>{@Overridepublic void show(E e) {}
}

通配符

这部分的概念也有点难理解

通配符的类别

?? extends xxx? super xxx
无边际通配符固定上边界统配符固定下边界统配符
<?><? extends E><? super E>
泛型可以接受未知类型的数据(任意类型)限制泛型可以接受的类型为:xxx及xxx的子类、实现接口xxx的类限制泛型 可以接受的类型为:xxx及xxx的父类

示例

// 父类
@Data
abstract class Employee {private String name;private double salary;public abstract void work();
}
// 继承的子类
class Coder extends Employee {@Overridepublic void work() {System.out.println("程序员写代码...");}
}class Manager extends Employee {@Overridepublic void work() {System.out.println("项目经理分配任务...");}
}
// 调用
public class GenericsDemo5 {public static void main(String[] args) {ArrayList<Coder> list1 = new ArrayList<>();list1.add(new Coder());ArrayList<Manager> list2 = new ArrayList<>();list2.add(new Manager());method(list1); // 固定上界统配符method(list2); // 固定下界统配符}public static void method(ArrayList<? extends Employee> list){for (Employee o : list) {o.work();}}public static void method1(ArrayList<? super Employee> list){for (Object A : list) {Employee o = (Employee)A;o.work();}}    
}

树的基本概念

image-20231017154352376

概念理解
节点(结点、Node)上边的每一个圈圈都是一个节点【节点内部存储有:父节点地址、节点数据值、左子节点地址、右子节点地址】
每一个节点的子节点数量【在二叉数中,任意节点的度<=2】
树高整棵树的层数【上边数的树高=4】
根节点最顶层的节点【节点值为22的这个节点,其左子节点为18,右子节点为26,没有父节点】
左子节点【22的左子节点是18】
右子节点【22的右子节点是26】
根节点的左子树【18节点及其所有子节点】
根节点的右子树【26节点及其所有子节点】

什么是二叉树?

二叉树是每个节点最多有两个子树的树结构。

下边相关二叉树,先学习基本特点和优缺点,后续做题的时候,再学习相关原理、方法,写出代码

二叉树–普通二叉树

仅满足二叉树的规则,没有多余的特点

image-20231017155918842

二叉树–二叉查找树

二叉排序树,又称二叉查找树,亦称二叉搜索树

image-20231017155958621

定义规则

  • 若左子树不为空,则左子树上所有节点的值均小于或等于它的根节点的值
  • 若右子树不为空,则右子树上所有节点的值均大于或等于它的根节点的值
  • 任意节点的左右子树,也都是二叉查找树

优缺点

  • 优点:常规情况下,元素查找速度快,每一次查找,筛选掉剩余元素的一半

  • 不足:特殊二叉查找树(所有节点仅有右节点或仅有左节点),每次查找只能过滤掉一个元素,查找速度变得跟数组一样

二叉树–平衡二叉树

image-20240229202425934

定义规则

1、平衡二叉树由若干个节点组成

2、如果一颗二叉树不为空,那么至少拥有一个根节点,且根节点没有父节点

3、每个子节点都符合如下规范:

  • 节点的数值限制:没有键值相等的节点

  • 节点的子节点数量限制:每个节点可以拥有最多两个子节点

  • 节点的左子树数值限制:若任意节点的左子树不空,则左子树上所有的节点值均小于该节点的值

  • 节点的右子树数值限制:若任意节点的右子树不空,则右子树上所有节点的值均大于该节点的值

  • 节点的左、右子树高度限制:节点左树和右树的高度差的绝对值小于等于1

旋转机制

挺巧妙地,用到了再说

二叉树–红黑树

定义规则

用到再说

红黑规则

用到再说

常见数据结构

总体特点

数据结构结构操作特点补充
一端开口(栈顶)
一端封闭(栈底)
从栈顶到栈底:进栈/压栈
从栈底到栈顶:出栈/弹栈
后进先出,先进后出
队列一端开口(后端)
一端开口(前端)
入队列(后端)、出队列(前端)先进先出,后进后出
数组起始地址值、索引根据地址值和索引定位数据查询速度快(且一致):索引+地址值定位;
增、删效率低:增删过程大概率伴随大量数据移动
链表基本组成:节点
本身地址、数据、下一个节点的地址
查询慢:查询任何数据都要从头开始查
增删相对快:查到对应元素,更改节点存储内容即可,不需要多余的移动
存储内存不连续
双向链表基本组成:节点
前一个节点地址、数据、下一个节点的地址
同【链表】存储内存不连续
见【补充知识-树】

结构图

image-20231018152435202

队列

image-20231018152516475

链表(单向链表和双向链表)

节点结构

image-20231017092555108

单项链表和双向链表

image-20231017092826875

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

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

相关文章

【自然语言处理】NLP入门(五):1、正则表达式与Python中的实现(5):字符串常用方法:对齐方式、大小写转换详解

文章目录 一、前言二、正则表达式与Python中的实现1.字符串构造2. 字符串截取3. 字符串格式化输出4.字符转义符5. 字符串常用函数函数与方法之比较 6. 字符串常用方法1. 对齐方式center()ljust()rjust() 2. 大小写转换lower()upper()capitalize()title()swapcase() 一、前言 本…

在Jetson Xavier NX 开发板上使用VScode执行ROS程序详细过程

1.创建 ROS 工作空间ws 在home下打开终端输入下面指令 mkdir -p xxx_ws/src(必须得有 src) cd 自己命名_ws catkin_make2.启动 vscode cd 自己命名_ws code .3.vscode 中编译 ros 快捷键 ctrl shift B 调用编译&#xff0c;在上方弹窗位置选择:catkin_make:build 可以点击…

jenkins配置

jenkins前端常用插件&#xff1a; Git Parameter 、Maven Integration 、Proxmox&#xff08;snapshot&#xff09;、Pipeline: Multibranch&#xff08;多分支流水线&#xff09;、Pipeline: Stage Step、pipeline Git plugin、NodeJS Plugin、Publish Over SSH、SSH server…

python界面开发 - Menu (popupmenu) 右键菜单

文章目录 1. python图形界面开发1.1. Python图形界面开发——Tkinter1.2. Python图形界面开发——PyQt1.3. Python图形界面开发——wxPython1.4. Python图形界面开发—— PyGTK&#xff1a;基于GTK1.5. Python图形界面开发—— Kivy1.6. Python图形界面开发——可视化工具1.7. …

【个人学习笔记】概率论与数理统计知识梳理【六】

文章目录 第六章 样本及抽样分布一、随机抽样二、直方图与箱线图2.1 直方图2.2 箱线图 三、抽样分布总结 第六章 样本及抽样分布 好久没更新了&#xff0c;重新捡起来把它更完吧&#xff0c;可能会再开一个机器学习的笔记系列&#xff0c;参考用书是周志华的西瓜书。前五章主要…

Android 14.0 首次开机默认授予app运行时权限(去掉运行时授权弹窗)

1.概述 在14.0的系统rom产品定制化开发中&#xff0c;在6.0以后对于权限的申请&#xff0c;都需要动态申请&#xff0c;所以会在系统首次启动后&#xff0c;在app的首次运行时&#xff0c; 会弹出授权窗口&#xff0c;会让用户手动授予app运行时权限&#xff0c;在由于系统产品…

6、JavaWeb-Mybatis

P116 Mybatis-入门 Mybatis是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发。 持久层就是三层控制中的Dao层&#xff0c;数据访问层/持久层&#xff0c; P117 Mybatis-入门-快速入门程序 步骤&#xff1a; 创建springboot工程&#xff0c;数据表和实体类 引入mybat…

【办公类-39-03】批量下载微信公众号图片(三)-微信公众号链接的爬虫下载

背景需求&#xff1a; 测试两种公众号图片下载&#xff0c; 1、UIBOT下载速度慢&#xff0c;也需要有UIBOT软件 【办公类-39-01】批量下载微信公众号图片&#xff08;一&#xff09;UIBOT图片下载-CSDN博客文章浏览阅读289次。【办公类-39-01】批量下载微信公众号图片&#…

Python笔记(三)—— Python循环语句

循环普遍存在于日常生活中&#xff0c;同样&#xff0c;在程序中&#xff0c;循环功能也是至关重要的基础功能。 循环在程序中同判断一样&#xff0c;也是广泛存在的&#xff0c;是非常多功能实现的基础&#xff1a; bilibili循环轮播图 循环和判断一样&#xff0c;同样是程序…

XXE-XML实体注入漏洞

目录 1.xml基础 1.1什么是xml 1.2xml文档结构 1.3 什么是DTD 1.4 什么是实体 1.5 什么是外部实体 2.xxe漏洞 2.1xxe漏洞基本介绍 2.2xxe漏洞的危害 经典漏洞案例分析 3.xxe漏洞挖掘和利用 3.1. 识别潜在的XML入口 3.2. 检查XML处理逻辑 3.3. 构造试探Payload 常…

Redis核心数据结构之字典(一)

字典 概述 字典又称为符号表(symbol table)、关联数组(associative array)或映射(map)&#xff0c;是一种保存键值对(key-value pair)的抽象数据结构&#xff0c;在字典中&#xff0c;一个键(key)可以和一个值(value)进行关联(或者说将键映射为值)&#xff0c;这些关联的键和…

OpenText Availability——适用于 Windows 和 Linux 服务器的高可用性和灾难恢复解决方案

OpenText Availability——适用于 Windows 和 Linux 服务器的高可用性和灾难恢复解决方案 连续复制&#xff0c;最大限度地减少数据丢失快速故障转移&#xff0c;最大限度地减少停机时间可忽略的性能影响支持物理、虚拟和基于云的系统平台 停机从多种途径侵扰 IT 企业。 从相…

最佳牛围栏(二分 + 前缀和)

最佳牛围栏 原题链接&#xff1a;https://www.acwing.com/problem/content/104/ 题目 思路 我们发现若是枚举答案的话&#xff0c;那么我们判断是否存在一个平均值大于等于mid&#xff0c;如果最优解是x&#xff0c;那么mid < x的时候&#xff0c;必然可以找到一段&#x…

算法---双指针练习-1(移动零)

移动零 1. 题目解析2. 讲解算法原理数组划分&#xff0c;数组分块&#xff08;核心思想&#xff09;如何做到 3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 数组划分&#xff0c;数组分块&#xff08;核心思想&#xff09; dest一般初始化为-1&#x…

计算机设计大赛 深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …

16、电源管理入门之驱动Runtime PM管理

目录 1. 框架介绍 1.1 为什么需要Runtime PM Framework? 1.2 系统框架图 2. Drivers 3. Runtime PM core 4. power domain framework 5. runtime pm的sysfs 6参考: Runtime PM管理也就是设备驱动里面的电源管理,即设备驱动结构体里面的struct dev_pm_ops,只控制设…

bun实现HTTP服务器

Bun 提供了原生 Bun.serve API。它实现了 fetch 以及Node.js的 http 和 https 模块。 这些模块已被重新实现&#xff0c;以使用 Bun 的快速内部 HTTP 基础设施。随意直接使用这些模块;像 Express 这样依赖于这些模块的框架应该开箱即用。有关详细的兼容性信息&#xff0c;请参阅…

【HarmonyOS】ArkTS-箭头函数

箭头函数 箭头函数是 比普通函数 更简洁 的一种函数写法 () > {}() > {// 函数体 }let 函数名 () > {// 函数体 }let 函数名 () > {// 函数体 } 函数名(实参1, 实参2)let 函数名 (形参1: 类型, 形参2: 类型) > {// 函数体 } 函数名(实参1, 实参2)let 函数名 …

变频器学习

西门子变频器 SINAMICS V20 入门级变频器 SINAMICS G120C

《Trustzone/TEE/安全-实践版》介绍

第一章&#xff1a;课程说明和准备 课程介绍和说明 资料准备 为什么使用qemu_v8环境&#xff1f; 为什么选择香橙派开发板&#xff1f; optee qemu_v8环境展示 香橙派optee环境展示 第二章&#xff1a;Qemu环境搭建 ubuntu20.04的安装(virtualboxubuntu20.04) 搭建optee qem…