【系统学习】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.hqwc.cn/news/518666.html

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

相关文章

实时渲染技术流化方案在ilab评审中有哪些作用?

先说两个在日常沟通中一线用户反馈的&#xff0c;高校虚拟仿真课程在使用中遇到的场景。 场景1&#xff1a;虚拟仿真课程开发比较早&#xff0c;当时使用的引擎是 web player&#xff0c;学生使用的机器也好几年了&#xff0c;原来的课程在使用的过程中加载很慢&#xff0c;无…

数据结构—KMP 算法:

算法思想&#xff1a; KMP算法实现寻找主串中子串的位置时&#xff0c;主串指针地址不回退&#xff0c;在比对过程中串仅仅遍历一次&#xff0c;子串的回退可以是与当前主串可重新最多匹配的地址位置。 BF与KMP算法比对&#xff1a; KMP BF 主串不用回退 主串回退&#xf…

OracleXE112、plsqldev1207的安装和基本配置

OracleXE112、plsqldev1207的安装和基本配置 OracleXE112、plsqldev1207的安装和基本配置Oracle安装oracle是什么Oracle两个版本下载安装包 安装OracleXE112_Win64注意&#xff1a;安装到空目录下&#xff1b;输入口令&#xff08;记住啊&#xff01;&#xff09;安装成功&…

线性表试题(二)——顺序表应用

二、综合应用题 01&#xff0e;从顺序表中删除具有最小值的元素&#xff08;假设唯一&#xff09;并由函数返回被删元素的值。空出的位置由最后一个元素填补&#xff0c;若顺序表为空&#xff0c;则显示出错信息并退出运行。 02&#xff0e;设计一个高效算法&#xff0c;将顺序…

Leetcoder Day39| 动态规划part06 完全背包问题

完全背包理论 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 示例&#xff1a; 背包最大…

第 5 章 ROS常用组件动态坐标变换(自学二刷笔记)

5.1.3 动态坐标变换 所谓动态坐标变换&#xff0c;是指两个坐标系之间的相对位置是变化的。 需求描述: 启动 turtlesim_node&#xff0c;该节点中窗体有一个世界坐标系(左下角为坐标系原点)&#xff0c;乌龟是另一个坐标系&#xff0c;键盘控制乌龟运动&#xff0c;将两个坐…

书籍强烈推荐:“计算机界三大神书”之一 ——SICP

文章目录 1. 书籍推荐2. 粉丝福利3. 自主购买 1. 书籍推荐 《计算机程序的构造和解释》&#xff08;Structure and Interpretation of Computer Programs&#xff0c;简记为 SICP&#xff09;是MIT的基础课教材&#xff0c;出版后引起计算机教育界的广泛关注&#xff0c;对推动…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Checkbox)

提供多选框组件&#xff0c;通常用于某选项的打开或关闭。 说明&#xff1a; API version 11开始&#xff0c;Checkbox默认样式由圆角方形变为圆形。 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口…

Android视角看鸿蒙第一课(工程目录)

Android视角看鸿蒙第一课&#xff08;工程目录&#xff09; 导读 鸿蒙马上就来了&#xff0c;这个工作很有可能落到Android开发的头上&#xff0c;既是机遇也是挑战&#xff0c;希望能跟上时代的浪潮&#xff0c;迫不得已开始学习鸿蒙开发&#xff0c;顺带分享记录下 我的学…

数据结构界的终极幻神----树

目录 一.数的概念和分类 种类 二.重点概念 哈希树: 二叉树的线索化 什么是线索化 为什么要线索化 特殊的查找树 完全二叉树 三.手撕完全二叉树(堆) 重点讲解 向上搜索算法 向下搜索算法 一.数的概念和分类 树&#xff08;tree&#xff09;是包含 n(n≥0) [2] 个节…

影响APP广告变现收益的4个关键因素

APP的广告收入&#xff08;IAA&#xff09;展示 * eCPM/1000 IAA收入其实是由广告总展示量和每次展示的平均收入共同决定的。所以&#xff0c;提高IAA收入&#xff0c;我们需要双管齐下&#xff1a;同时提高广告总展示量和平均每次展示的收入。 app广告变现对接点击⬇️链接&…

全志D1s开发板裸机开发之坏境搭建

环境搭建 开发板介绍 张天飞老师编写的《RISC-V体系结构编程与实践》&#xff0c;里面的源码是基于 QEMU 模拟器的&#xff0c;可以认为它是一款虚拟的开发板。如果需要在真实开发板上学习&#xff0c;可以使用百问网的 DongshanPI-D1S 开发板。 DongshanPI-D1S 是百问网推出…