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

news2025/1/15 16:28:27

文章目录

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

泛型

什么是泛型?

含义的理解还不够深入

泛型:指广泛的数据类型

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

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

版本信息:于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> {

    @Override
    public void show(String s) {
    }
}

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

class InterBImpl<E> implements Inter<E>{

    @Override
    public 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 {
    @Override
    public void work() {
        System.out.println("程序员写代码...");
    }
}

class Manager extends Employee {
    @Override
    public 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.coloradmin.cn/o/1497092.html

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

相关文章

node的安装与介绍

安装 下载地址 node官网首页就会有两个安装选择&#xff0c;会根据当前电脑的系统自动显示对应的安装包&#xff0c;一个长期维护版&#xff08;LTS&#xff09;,一个是尝鲜版&#xff0c;记住选择LTS版本 安装指定版本下载截图 安装过程截图&#xff08;非常简单&#xff…

STM32CubeMX学习笔记14 ---SPI总线

1. 简介 1.1 SPI总线介绍 SPI 是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。 SPI&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在…

掌握Linux之巅:RHCE认证快速攻略

在数字化时代&#xff0c;Linux系统已经成为企业级应用的重要支柱。RHCE&#xff08;Red Hat Certified Engineer&#xff09;认证&#xff0c;作为Linux领域的权威认证&#xff0c;不仅代表了专业技术的认可&#xff0c;更是职业发展的有力武器。本文将为你揭秘如何快速掌握Li…

@Autoweird和@Resourse的区别 java定义Bean的方式

Autoweird private Apple apple; Autoweird首先是根据类型来找 就是这个Apple 如果找到多个 会在根据名称就是这个apple来找&#xff0c;如果再找不到&#xff0c;就报错 Resourse相反 举例说明&#xff1a; 我们使用Autoweird ZhouyuService zhouyuService Resourse特别之…

C语言题目练习

目录 前言 1、转置矩阵 1.1 题目 描述 输入描述&#xff1a; 输出描述&#xff1a; 1.2解题 分析&#xff1a; 程序&#xff1a; 2、KiKi判断上三角矩阵 2.1 题目 描述 输入描述&#xff1a; 输出描述&#xff1a; 2.2 解题 分析&#xff1a; 程序&#xff1a; 3、…

什么是工业交换机?

如今&#xff0c;工业交换机在能源、环保、交通、智慧城市监控等各个行业都发挥着至关重要的作用&#xff0c;其需求也日益增长。本文将全面介绍工业交换机&#xff0c;帮助你进一步加深了解。 什么是工业交换机&#xff1f; 工业交换机&#xff0c;又称工业以太网交换机&…

基于微信小程序的电影院订票选座系统的设计与实现(程序+数据库+)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

轻薄蓝牙工牌室内人员定位应用

在现代化企业管理的背景下&#xff0c;轻薄蓝牙工牌人员定位应用逐渐崭露头角&#xff0c;成为提升企业效率和安全性的重要工具。本文将从轻薄蓝牙工牌的定义、特点、应用场景以及未来发展趋势等方面&#xff0c;对其进行全面深入的探讨。 一、轻薄蓝牙工牌的定义与特点 轻薄…

Vue:纯前端实现文件拖拽上传

先看一下拖拽相关的事件&#xff1a;dragover、dragenter drop和dragleave 。 dragover事件&#xff1a;当被拖动的元素在一个可放置目标上方时&#xff0c;该事件会被触发。 通常&#xff0c;我们会使用event.preventDefault()方法来取消浏览器默认的拖放行为&#xff0c;以便…

赛事通知丨2024年(第12届)“泰迪杯”挑战赛即将开始

2024年&#xff08;第12届&#xff09;“泰迪杯”数据挖掘挑战赛将于3月8日开放报名。“泰迪杯”数据挖掘挑战赛始创于2013年&#xff0c;迄今已经连续举办了12年。累计参赛高校千余所&#xff0c;累计参赛人数逾10万人&#xff0c;全国各省份均有参加。大赛的开展始终秉持推动…

局域网管理工具

每个组织的业务运营方法都是独一无二的&#xff0c;其网络基础设施也是如此&#xff0c;由于随着超融合基础设施等新计算技术的发展&#xff0c;局域网变得越来越复杂&#xff0c;因此局域网管理也应该如此&#xff0c;组织需要量身定制的局域网管理解决方案&#xff0c;这些解…

QT6.6 android开发环境搭建

一.目标 本文目的为实现在QT6.6下搭建android开发环境&#xff0c;可以实现QT6.6开发的QT程序&#xff08;widget及qml工程&#xff09;部署到android设备中。 二.环境安装 1.QT6.6环境安装 &#xff08;1&#xff09;在线安装器下载&#xff1a; https://download.qt.io/a…

手动更新服务器node新版本

1.安装nodejs下载到本地 2.下载后放到服务器上的指定目录中。例如/usr/local/src/node 3.执行tar -xvf node-v20.10.0-linux-x64.tar.xz解压 4.执行一下命令配置软连接 -f是如果文件存在就覆盖 # 将node源文件映射到usr/bin下的node文件 ln -fs /usr/local/src/node/node-…

10G Ethernet Subsystem 基于K7芯片的UDP通讯

此文章只用于教程开发笔记&#xff0c;不做过多的废话介绍。 IP核的建立 此选项不进行共享时钟逻辑。优点接口少好操作&#xff0c;缺点只可以建立一个IP核。&#xff08;我有一篇文章介绍了如何进行多个核互联&#xff09;传送门&#xff1a;FPGA光纤Aurora_8B_10B_fpga auro…

实现vue elmentUI图片本地上传

实现思路 后端代码 //上传头像PostMapping("/uplaod")public String upload(MultipartFile file) { // System.out.println(file"图片上次");//图片校验if (file.isEmpty()) {return "图片上传失败";}//可以自己加一点校验 例如上传的是不…

HBase 的安装与部署

目录 1 启动 zookeeper2 启动 Hadoop3 HBase 的安装与部署4 HBase 高可用 1 启动 zookeeper [huweihadoop101 ~]$ bin/zk_cluster.sh start2 启动 Hadoop [huweihadoop101 ~]$ bin/hdp_cluster.sh start3 HBase 的安装与部署 &#xff08;1&#xff09;将 hbase-2.0.5-bin.tar.…

加速大模型落地:火山引擎向量数据库的实践应用

近两年随着大模型技术的快速发展&#xff0c;图片、视频、自然语言等多模态、非结构化数据的查找需求变大&#xff0c;非结构化数据的量级也远大于结构化数据&#xff0c;传统数据库已经无法满足如此多样化数据的处理需求。向量数据库以其海量的数据存储规模、高效的计算查询能…

修改MonkeyDev默认配置适配Xcode15

上一篇文章介绍了升级Xcode15后,适配MonkeyDev的一些操作,具体操作可以查看:Xcode 15 适配 MonkeyDev。 但是每次新建项目都要去修改那些配置,浪费时间和精力,这篇文章主要介绍如何修改MonkeyDev的默认配置,做到一次修改永久生效。 MonkeyDev的默认安装路径是在/opt/Mo…

智能驾驶规划控制理论学习07-规划算法整体框架

一、解耦合策略 1、路径-速度解耦策略概述 路径-速度解耦指的是将车辆的运动分成路径规划和速度规划两部分&#xff0c;对两个部分分别进行研究。 路径规划&#xff1a; 假设环境是“静态的”&#xff0c;将障碍物投射到参考路径上&#xff0c;并规划一条避开它们的路径&…

004-执行上下文事件循环

执行上下文&事件循环 1、执行上下文2、执行上下文类型3、执行上下文的生命周期4、示例说明5、事件循环机制6、宏任务7、微任务8、同步任务、宏任务、微任务9、代码执行顺序 - 示例 &#x1f4a1; Tips&#xff1a;用于说明 浏览器 对 JavaScript 执行顺序&#xff0c;涉及知…