当前位置: 首页 > article >正文

Java基础 Day19

一、泛型(JDK5引入)

1、基本概念

在编译阶段约束操作的数据类型,并进行检查

好处:统一数据类型,将运行期的错误提升到了编译期

泛型的默认类型是 Object

2、泛型类

在创建类的时候写上泛型

在创建具体对象的时候确定类型

E:Element

T:Type

K:Key

V:Value

public class GenericsDemo {public static void main(String[] args) {Student<String> stu1 = new Student<>("aaa", "1");}
}class Student<E> {private E name;private E id;public Student() {}public Student(E name, E id) {this.name = name;this.id = id;}public E getName() {return name;}public void setName(E name) {this.name = name;}public E getId() {return id;}public void setId(E id) {this.id = id;}public String toString() {return "Student{name = " + name + ", id = " + id + "}";}
}

3、泛型方法

(1)非静态方法:其泛型会根据类的泛型进行匹配,如上面的 getName()、getId() 方法

(2)静态方法:要声明出自己独立的泛型,在调用方法传参时确定实际的类型

public class GenericsDemo {public static void main(String[] args) {String[] arr1 = {"aaa", "ccc", "bbb"};Integer[] arr2 = {1, 2, 3};Double[] arr3 = {1.1, 2.2, 3.3};printArray(arr1);printArray(arr2);printArray(arr3);}public static<T> void printArray(T[] arr) {for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}
}

4、泛型接口

(1)可以在实现类实现接口时确定类型

(2)也可以让实现类继续使用泛型,在创建实现类对象时确定类型

5、泛型通配符

public static void func1(ArrayList<?> list) {}
public static void func2(ArrayList<? extends E> list) {}
public static void func3(ArrayList<? super E> list) {}? 表示 可以是任意类型
? extends E 表示 可以是E或E的子类
? super E 表示 可以是E或E的父类 

二、红黑树

1、简介

红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构

它是一种特殊的二叉查找树,红黑树的每一个节点上都有存储位表示节点的颜色

每一个节点可以是红或者黑;红黑树不是高度平衡的,它的平衡是通过"红黑规则"进行实现的

2、红黑规则

(1)颜色属性:每个节点非红即黑

(2)根属性:根节点必须为黑色

(3)叶子属性:所有叶子节点(NIL节点,空节点)均为黑色

(4)红色节点约束:红色节点的子节点必须为黑色(即不存在连续的红节点)

(5)黑高一致性:从任意节点到其所有叶子节点的路径中,包含的黑色节点数量相同

3、添加节点

节点默认是红色

三、TreeSet 集合

1、作用

对集合中的元素进行排序、去重操作(底层由红黑树实现)

2、两种排序方式

(1)自然排序

类实现Comparable 接口,想和哪个类作比较,泛型就写哪个类

重写compareTo 方法

根据方法的返回值来组织排序规则

compare方法,返回负值则节点往左,正值则节点往右,0则不存

TreeSet 集合的add 方法会自动调用 compareTo 方法

TreeSet<Worker> st = new TreeSet<>();
st.add(new Worker("aa", 30));
st.add(new Worker("bb", 33));
st.add(new Worker("cc", 31));
st.add(new Worker("dd", 32));
System.out.println(st);
// 默认是中序遍历(左根右)
// 按 id 升序排列class Worker implements Comparable<Worker>{String name;int id;@Overridepublic int compareTo(Worker o) {return this.id - o.id;}
}

(2)比较器排序

在 TreeSet 的构造方法中,传入 Compartor 接口的实现类对象

重写 compare 方法

根据方法的返回值, 来组织排序规则

比较器排序的优先级高于自然排序

Java已经写好的类大多有自然排序规则,可以用比较器对其进行覆盖

TreeSet<Worker> st = new TreeSet<>(new Comparator<Worker>() {@Overridepublic int compare(Worker o1, Worker o2) {return o1.getId() - o2.getId();    }
});
// 可以用 Lambda 表达式

相关文章:

Java基础 Day19

一、泛型&#xff08;JDK5引入&#xff09; 1、基本概念 在编译阶段约束操作的数据类型&#xff0c;并进行检查 好处&#xff1a;统一数据类型&#xff0c;将运行期的错误提升到了编译期 泛型的默认类型是 Object 2、泛型类 在创建类的时候写上泛型 在创建具体对象的时候…...

VMware+Windows 11 跳过安装阶段微软账号登录

OOBE 阶段 来到这里 断开网络适配器 VMware右下角&#xff0c;点击网络适配器&#xff0c;断开连接 同时按下 Shift 和 F10 &#xff0c;打开命令提示符(cmd.exe) 输入 oobe\BypassNRO.cmd 并回车 接下来正常进行即可...

HarmonyOS开发-应用间跳转

1. HarmonyOS开发-应用间跳转 在鸿蒙中,我们再开发过程当中或多或少都会遇见想要从一个App的页面跳转至另一个App的页面,这个时候我们要怎么进行跳转呢,其实在HarmonyOS开发者文档中只需要用到Want对象和startAbility()方法进行跳转就可以了。 1.1. 实现 (1)我们要先准备两个…...

网工每日一练

2025/5/22.每日一练&#xff08;单选题&#xff09; 路由器在查找路由表时存在最长匹配原则&#xff0c;这里的长度指的是以下哪个参数&#xff1f; A. NextHopIP地址的大小 B. 路由协议的优先级 C. Cost D. 掩码的长度 路由器在查找路由表时遵循的最长匹配原则中&#xff0c;“…...

使用 Navicat 17 for PostgreSQL 时,请问哪个版本支持 PostgreSQL 的 20150623 版本?还是每个版本都支持?

&#x1f9d1;‍&#x1f4bb; PostgreSQL 用户 使用 Navicat 17 for PostgreSQL 时&#xff0c;请问哪个版本支持 PostgreSQL 的 20150623 版本&#xff1f;还是每个版本都支持&#xff1f; &#x1f9d1;‍&#x1f527; 官方技术中心 Navicat Premium 17 和 Navicat for P…...

校园二手交易系统

该交易平台分为两部分&#xff0c;前台和后台。用户在前台进行商品选购以及交易&#xff1b;管理员登录后台可以对商品进行维护&#xff0c;主要功能包含&#xff1a; 后台系统的主要功能模块如下&#xff1a; 登录功能、注册功能、后台首页 系统设置&#xff1a; 菜单管理、…...

基于pycharm,python,flask,sklearn,orm,mysql,在线深度学习sql语句检测系统

详细视频:【基于pycharm,python,flask,sklearn,orm,mysql&#xff0c;在线深度学习sql语句检测系统-哔哩哔哩】 https://b23.tv/JLQDwNn...

LangChain02-Agent与Memory模块

Agent与Memory模块深度解析 1. Agent模块原理 1.1 ReAct框架的实现机制 Agent是LangChain中最具智能化的组件&#xff0c;其核心思想基于 ReAct框架&#xff08;Reasoning Acting&#xff09;&#xff0c;即通过 思维&#xff08;Thought&#xff09; 和 行动&#xff08;Ac…...

upload-labs通关笔记-第17关文件上传之二次渲染gif格式

系列目录 upload-labs通关笔记-第1关 文件上传之前端绕过&#xff08;3种渗透方法&#xff09; upload-labs通关笔记-第2关 文件上传之MIME绕过-CSDN博客 upload-labs通关笔记-第3关 文件上传之黑名单绕过-CSDN博客 upload-labs通关笔记-第4关 文件上传之.htacess绕过-CSDN…...

计算机网络学习20250525

应用层协议原理 创建一个网络应用,编写应用程序,这些应用程序运行在不同的端系统上,通过网络彼此通信 不需要在网络核心设备(路由器,交换机)上写应用程序网络应用程序工作在网络层以下将应用程序限制在端系统上促进应用程序迅速研发和部署,将复杂问题放到网络边缘网络应…...

STM32中的SPI通信协议

IIC和SPI的对比 IIC是半双工的通信&#xff0c;无法同时收发信息&#xff1b;SPI是全双工通讯&#xff0c;可以同时收发信息&#xff1b;IIC的通讯协议较复杂&#xff0c;而SPI通讯协议较简单&#xff1b;IIC需要通过地址选择从机&#xff0c;而SPI只主要一个引脚即可选中从机…...

从版本控制到协同开发:深度解析 Git、SVN 及现代工具链

前言&#xff1a;在当今软件开发的浪潮中&#xff0c;版本控制与协同开发无疑扮演着举足轻重的角色。从最初的单兵作战到如今大规模团队的高效协作&#xff0c;一套成熟且得力的版本控制系统以及围绕其构建的现代工具链&#xff0c;已然成为推动软件项目稳步前行的关键引擎。今…...

redis Pub/Sub 简介 -16 (PUBLISH、SUBSCRIBE、PSUBSCRIBE)

Redis Pub/Sub 简介&#xff1a;PUBLISH、SUBSCRIBE、PSUBSCRIBE Redis Pub/Sub 是一种强大的消息传递范例&#xff0c;可在应用程序的不同部分之间实现实时通信。它是构建可扩展和响应式系统的基石&#xff0c;允许组件在没有直接依赖的情况下进行交互。本章将全面介绍 Redis…...

《黄帝内经》数学建模与形式化表征方式的重构

黄帝内经的数学概括&#xff1a;《黄帝内经》数学建模与形式化表征方式的重构 摘要&#xff1a;《黄帝内经》通过现代数学理论如动力系统、代数拓扑和随机过程&#xff0c;被重构为一个形式化的人体健康模型。该模型包括阴阳动力学的微分几何、五行代数的李群结构、经络拓扑与同…...

PyTorch Image Models (timm) 技术指南

timm PyTorch Image Models (timm) 技术指南功能概述 一、引言二、timm 库概述三、安装 timm 库四、模型加载与推理示例4.1 通用推理流程4.2 具体模型示例4.2.1 ResNeXt50-32x4d4.2.2 EfficientNet-V2 Small 模型4.2.3 DeiT-3 large 模型4.2.4 RepViT-M2 模型4.2.5 ResNet-RS-1…...

基于Scikit-learn与Flask的医疗AI糖尿病预测系统开发实战

引言 在精准医疗时代&#xff0c;人工智能技术正在重塑临床决策流程。本文将深入解析如何基于MIMIC-III医疗大数据集&#xff0c;使用Python生态构建符合医疗AI开发规范的糖尿病预测系统。项目涵盖从数据治理到模型部署的全流程&#xff0c;最终交付符合DICOM标准的临床决策支…...

掌握聚合函数:COUNT,MAX,MIN,SUM,AVG,GROUP BY和HAVING子句的用法,Where和HAVING的区别

对于Java后端开发来说&#xff0c;必须要掌握常用的聚合函数&#xff1a;COUNT&#xff0c;MAX&#xff0c;MIN&#xff0c;SUM&#xff0c;AVG&#xff0c;掌握GROUP BY和HAVING子句的用法&#xff0c;掌握Where和HAVING的区别&#xff1a; ✅ 一、常用聚合函数&#xff08;聚…...

【Node.js】高级主题

个人主页&#xff1a;Guiat 归属专栏&#xff1a;node.js 文章目录 1. Node.js 高级主题概览1.1 高级主题架构图 2. 事件循环与异步编程深度解析2.1 事件循环机制详解事件循环阶段详解 2.2 异步编程模式演进高级异步模式实现 3. 内存管理与性能优化3.1 V8 内存管理机制内存监控…...

【Linux】定时任务 Crontab 与时间同步服务器

目录 一、用户定时任务的创建与使用 1.1 用户定时任务的使用技巧 1.2 管理员对用户定时任务的管理 1.3 用户黑白名单的管理 一、用户定时任务的创建与使用 1.1 用户定时任务的使用技巧 第一步&#xff1a;查看服务基本信息 systemctl status crond.service //查看周期性…...

【TCP/IP协议族详解】

目录 第1层 链路/网络接口层—帧&#xff08;Frame&#xff09; 1. 链路层功能 2. 常见协议 2.1. ARP&#xff08;地址解析协议&#xff09; 3. 常见设备 第2层 网络层—数据包&#xff08;Packet&#xff09; 1. 网络层功能 2. 常见协议 2.1. ICMP&#xff08;互联网…...

蓝桥杯电子赛_零基础利用按键实现不同数字的显现

目录 一、前提 二、代码配置 bsp_key.c文件 main.c文件 main.c文件的详细讲解 功能实现 注意事项 一、前提 按键这一板块主要是以记忆为主&#xff0c;我直接给大家讲解代码去实现我要配置的功能。本次我要做的项目是板子上的按键有S4~S19&#xff0c;我希望任意一个按键…...

Docker架构详解

一,Docker的四大要素&#xff1a;Dockerfile、镜像(image)、容器(container)、仓库(repository) 1.dockerfile&#xff1a;在dockerfile文件中写构建docker的命令,通过dockerbuild构建image 2.镜像&#xff1a;就是一个只读的模板&#xff0c;镜像可以用来创建docker容器&…...

Rust 学习笔记:关于生命周期的练习题

Rust 学习笔记&#xff1a;关于生命周期的练习题 Rust 学习笔记&#xff1a;关于生命周期的练习题生命周期旨在防止哪种编程错误&#xff1f;以下代码能否通过编译&#xff1f;若能&#xff0c;输出是&#xff1f;如果一个引用的生命周期是 static&#xff0c;这意味着什么&…...

Spring AI 模块架构与功能解析

Spring AI 是 Spring 生态系统中的一个新兴模块&#xff0c;专注于简化人工智能和机器学习技术在 Spring 应用程序中的集成。本文将详细介绍 Spring AI 的核心组件、功能模块及其之间的关系&#xff0c;帮助具有技术基础的读者快速了解和应用 Spring AI。 Spring AI 的核心概念…...

单元测试学习笔记

单元测试是软件测试的基础层级&#xff0c;主要针对代码的最小可测试单元进行验证。单元测试可以帮助快速定位问题边界&#xff0c;提升代码可维护性&#xff0c;支持安全的重构操作。 测试对象&#xff1a; 独立函数/方法纯工具类&#xff08;如数据处理函数&#xff09;UI组…...

多模态大语言模型arxiv论文略读(九十)

Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Diffusion-based Contract Approach ➡️ 论文标题&#xff1a;Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Di…...

(1-6-1)Java 集合

目录 0.知识概述&#xff1a; 1.集合 1.1 集合继承关系类图 1.2 集合遍历的三种方式 1.3 集合排序 1.3.1 Collections实现 1.3.2 自定义排序类 2 List 集合概述 2.1 ArrayList &#xff08;1&#xff09;特点 &#xff08;2&#xff09;常用方法 2.2 LinkedList 3…...

spring5-配外部文件-spEL-工厂bean-FactoryBean-注解配bean

spring配外部文件 我们先在Spring里配置一个数据源 1.导c3p0包,这里我们先学一下hibernate持久化框架&#xff0c;以后用mybites. <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.…...

[安全清单] Linux 服务器安全基线:一份可以照着做的加固 Checklist

更多服务器知识&#xff0c;尽在hostol.com 嘿&#xff0c;各位服务器的“守护者”们&#xff01;当你拿到一台崭新的Linux服务器&#xff0c;或者接手一台正在运行的服务器时&#xff0c;脑子里是不是会闪过一丝丝关于安全的担忧&#xff1f;“我的服务器安全吗&#xff1f;”…...

企业级单元测试流程

企业级的单元测试流程不仅是简单编写测试用例&#xff0c;而是一整套系统化、自动化、可维护、可度量的工程实践&#xff0c;贯穿从代码编写到上线部署的全生命周期。下面是一个尽可能完善的 企业级单元测试流程设计方案&#xff0c;适用于 Java 生态&#xff08;JUnit Mockit…...