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

【数据结构】初识泛型

文章目录


一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。这种限制对代码的束缚就会很大。所以我们引入了泛型。泛型,泛顾名思义就是广泛的意思。就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。

我们来看下面的代码:

public class Demo03 {public static void main(String[] args) {MyArray myArray = new MyArray();myArray.setValue(0,10);myArray.setValue(1,"hello");String pos = myArray.getPos(0); //errorSystem.out.println(pos);}
}class MyArray {Object[] arr = new Object[10];//获取下标为pos的元素public Object getPos(int pos) {return this.arr[pos];}//在pos位置放入val元素public void setValue(int pos,Object val) {this.arr[pos] = val;}
}

通过上面的代码我们发现,虽然在这种情况下,当前数组任何数据都可以存放,但是,更多情况下,我们还是希望他只能够持有一种数据类型。而不是同时持有这么多类型。

泛型语法:

class 泛型类名称<类型形参列表> {
// 这里可以使用类型参数
}
class ClassName<T1, T2, ..., Tn> {
}
class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {
// 这里可以使用类型参数
}
class ClassName<T1, T2, ..., Tn> extends ParentClass<T1> {
// 可以只使用部分类型参数
}

我们可以把上面的代码用泛型进行改写:

public class Demo03 {public static void main(String[] args) {MyArray<Integer> myArray = new MyArray<>();myArray.setValue(0,10);myArray.setValue(1,11);}
}class MyArray<T> {T[] arr = (T[])new Object[10];public T getPos(int pos) {return this.arr[pos];}public void setValue(int pos,T val) {this.arr[pos] = val;}
}

代码解释:
类名后的 尖括号T 代表占位符,表示当前类是一个泛型类。
不能new泛型类型的数组,比如T[] t = new T[5];
类型后加入 Integer 指定当前类型
不需要进行强制类型转换
编译器会在存放元素的时候帮助我们进行类型检查。

泛型类的使用

泛型类<类型实参> 变量名; // 定义一个泛型类引用
new 泛型类<类型实参>(构造方法实参); // 实例化一个泛型类对象

比如:

MyArray<Integer> list = new MyArray<Integer>();
//等价于 MyArray<Integer> list = new MyArray<>();

注意:泛型只能接受引用类型,所有的基本数据类型必须使用包装类。
泛型的上界
在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。

class 泛型类名称<类型形参 extends 类型边界> {
//
}

比如:

public class MyArray<E extends Number> {
//
}

这样它就只接受 Number 的子类型作为 E 的类型实参。

MyArray<Integer> str1; // 正常,因为 Integer 是 Number 的子类型
MyArray<String> str2; // 编译错误,因为 String 不是 Number 的子类型

我们来看这道练习:写一个泛型,实现一个方法,方法是求指定类型数组的最大值

public class Demo02 {public static void main(String[] args) {FindMaxValue<Integer> tFindMaxValue = new FindMaxValue<>();Integer[] array = {1,4,6,2,10};Integer max = tFindMaxValue.findMax(array);System.out.println(max);}
}//泛型类
//<T extends Comparable<T>>  T一定是实现了Comparable接口
class FindMaxValue <T extends Comparable<T>> {public T findMax(T[] arr) {T max = arr[0];for (int i = 1; i < arr.length; i++) {if (max.compareTo(arr[i])<0){max = arr[i];}}return max;}
}

上面的代码我们也可以使用泛型方法来写

public class Demo02 {public static void main(String[] args) {Integer[] array1 = {1,4,6,2,10};Integer max1 = FindMaxValue1.findMax(array1);System.out.println(max1);}
}class FindMaxValue1 {//泛型方法public static <T extends Comparable<T>> T findMax(T[] arr) {T max = arr[0];for (int i = 1; i < arr.length; i++) {if (max.compareTo(arr[i])<0){max = arr[i];}}return max;}
}

相关文章:

【数据结构】初识泛型

文章目录 一般的类和方法&#xff0c;只能使用具体的类型: 要么是基本类型&#xff0c;要么是自定义的类。这种限制对代码的束缚就会很大。所以我们引入了泛型。泛型&#xff0c;泛顾名思义就是广泛的意思。就是适用于许多许多类型。从代码上讲&#xff0c;就是对类型实现了参数…...

代码随想录--哈希--有效的字母异位词

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true 示例 2: 输入: s "rat", t "car" 输出: false 说明: 你可以假设字符串只包含小写字母。…...

MySQL——数据的增删改

2023.9.12 本章开始学习DML (数据操纵语言) 语言。相关学习笔记如下&#xff1a; #DML语言 /* 数据操作语言&#xff1a; 插入&#xff1a;insert 修改&#xff1a;update 删除&#xff1a;delete */#一、插入语句 #方式一&#xff1a;经典的插入 /* 语法&#xff1a; insert …...

云服务器与http服务器

如何与http服务器建立连接&#xff08;客户端&#xff09;&#xff1f; http请求设计格式&#xff1a; 例子&#xff1a; 发送http请求 http数据响应格式&#xff1a; 接收http服务器返回的数据需要进一步进行字符串处理操作&#xff0c;提取有用的数据。...

golang教程 beego框架笔记一

安装beego 安装bee工具 beego文档 # windos 推荐使用 go install github.com/beego/bee/v2master go get -u github.com/beego/bee/v2masterwindows使用安装bee工具时碰到的问题&#xff1b; 环境配置都没有问题&#xff0c;但是执行官网的命令&#xff1a;go get -u github…...

【深度学习】Mini-Batch梯度下降法

Mini-Batch梯度下降法 在开始Mini-Batch算法开始之前&#xff0c;请确保你已经掌握梯度下降的最优化算法。 在训练神经网络时&#xff0c;使用向量化是加速训练速度的一个重要手段&#xff0c;它可以避免使用显式的for循环&#xff0c;并且调用经过大量优化的矩阵计算函数库。…...

AI项目六:WEB端部署YOLOv5

若该文为原创文章&#xff0c;转载请注明原文出处。 一、介绍 最近接触网页大屏&#xff0c;所以就想把YOLOV5部署到WEB端&#xff0c;通过了解&#xff0c;知道了两个方法&#xff1a; 1、基于Flask部署YOLOv5目标检测模型。 2、基于Streamlit部署YOLOv5目标检测。 代码在…...

敲代码常用快捷键

1、代码拖动 PyCharm&#xff1a;按住 shiftalt鼠标选中某一区域来拖动&#xff0c;即可实现拖动这一区域至指定区域。Visual Studio Code (VSCode): - Windows/Linux&#xff1a;Alt 鼠标左键拖动 - MacOS&#xff1a;Option 鼠标左键拖动 IntelliJ IDEA: - Win…...

MyBatis: 分页插件PageHelper直接传递分页参数的用法

一、加分页插件依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.13</version></dependency>二、配置分页插件&#xff0c;并配置相关属性&a…...

Python基于Flask的高校舆情分析,舆情监控可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 运行效果图 基于Python的微博大数据舆情分析&#xff0c;舆论情感分析可视化系统 系统介绍 微博舆情分析系…...

Python第一次作业练习

题目分析&#xff1a; """ 参考学校的相关规定。 对于四分制&#xff0c;百分制中的90分及以上可视为绩点中的4分&#xff0c;80 分及以上为3分&#xff0c;70 分以上为2分&#xff0c;60 分以上为1分; 五分制中的5分为四分制中的4分&#xff0c;4分为3分&#…...

InstallShield打包升级时不覆盖原有文件的解决方案

一个.NET Framework的Devexpress UI Windows Form项目&#xff0c;用的InstallShield&#xff0c;前些个版本都好好的&#xff0c;最近几个版本突然就没法更新了&#xff0c;每次更新的时候都覆盖不了原文件&#xff0c;而且这样更新后第一次打开程序&#xff08;虽然是老程序&…...

服务器巡检表-监控指标

1、巡检指标 系统资源K8S集群NginxJAVA应用RabbitMQRedisPostgreSQLElasticsearchELK日志系统 2、巡检项 检查项目 检查指标 检查标准 系统资源 CPU 使用率 正常&#xff1a;&#xff1c;70% 低风险&#xff1a;≥ 70% 中风险&#xff1a;≥ 85% 高风险&#xff1a;≥ 9…...

无涯教程-JavaScript - DDB函数

描述 DDB函数使用双倍余额递减法或您指定的某些其他方法返回指定期间内资产的折旧。 语法 DDB (cost, salvage, life, period, [factor])争论 Argument描述Required/OptionalCostThe initial cost of the asset.RequiredSalvage 折旧结束时的价值(有时称为资产的残值)。 该…...

uniapp打包微信小程序。报错:https://api.weixin.qq.com 不在以下 request 合法域名列表

场景&#xff1a;在进行打包上传测试时&#xff0c;发现登录失效&#xff0c;但在测试中【勾选不效应合法域名】就可以。 出现原因&#xff1a;我在获取到用户code后&#xff0c;直接使用调用官方接口换取openid 解决方案&#xff1a; 可以把code带给后端&#xff0c;让他们返…...

stm32之31.iic

iic双线制。一根是SCL&#xff0c;作为时钟同步线;一根是SDA&#xff0c;作为数据传输线 SDN #include "iic.h"#define SCL PBout(8)#define SDA_W PBout(9) #define SDA_R PBin(9)void IIC_GPIOInit(void) {GPIO_InitTypeDef GPIO_InitStructure;//使能时钟GR…...

新的 ChatGPT 提示工程技术:程序模拟

即时工程的世界在各个层面上都令人着迷,并且不乏巧妙的方法来推动像 ChatGPT 这样的代理生成特定类型的响应。思想链 (CoT)、基于指令、N-shot、Few-shot 等技术,甚至奉承/角色分配等技巧都是充满提示的库背后的灵感,旨在满足各种需求。 在本文中,我将深入研究一项技术,据…...

【Python】爬虫基础

爬虫是一种模拟浏览器实现&#xff0c;用以抓取网站信息的程序或者脚本。常见的爬虫有三大类&#xff1a; 通用式爬虫&#xff1a;通用式爬虫用以爬取一整个网页的信息。 聚焦式爬虫&#xff1a;聚焦式爬虫可以在通用式爬虫爬取到的一整个网页的信息基础上只选取一部分所需的…...

leetcode分类刷题:队列(Queue)(三、优先队列用于归并排序)

1、当TopK问题出现在多个有序序列中时&#xff0c;就要用到归并排序的思想了 2、将优先队列初始化为添加多个有序序列的首元素的形式&#xff0c;再循环K次优先队列的出队和出队元素对应序列下个元素的入队&#xff0c;就能得到TopK的元素了 3、这些题目好像没有TopK 大用小顶堆…...

无线窨井水位监测仪|排水管网智慧窨井液位计安装案例

城市窨井在城市排水、雨水、污水输送等方面发挥着重要作用&#xff0c;是污水管网、排水管网 建设重要的组成部分。随着城镇精细化建设及人民安全防范措施水平的提高&#xff0c;对窨井内水位的监测提出了更高的要求&#xff0c;他是排水管网问题的晴雨表&#xff0c;窨井信息化…...

Seurat实战:如何用FindMarkers函数精准鉴定单细胞亚群(附避坑指南)

Seurat实战&#xff1a;用FindMarkers函数精准鉴定单细胞亚群的7个关键策略 单细胞RNA测序技术正在彻底改变我们对复杂组织的理解能力。在肌肉组织、肿瘤微环境或大脑皮层等高度异质性的样本中&#xff0c;准确识别和注释细胞亚群是每个研究者面临的重大挑战。Seurat工具包中的…...

终极CoreUI Bootstrap管理模板:5个导航组件实战技巧提升用户体验

终极CoreUI Bootstrap管理模板&#xff1a;5个导航组件实战技巧提升用户体验 【免费下载链接】coreui-free-bootstrap-admin-template coreui/coreui-free-bootstrap-admin-template: CoreUI-Free-Bootstrap-Admin-Template 是一套免费的Bootstrap 4/5管理模板&#xff0c;包含…...

Pixel Mind Decoder 参数调优实战:平衡推理速度与识别准确率

Pixel Mind Decoder 参数调优实战&#xff1a;平衡推理速度与识别准确率 1. 为什么需要参数调优 当你第一次使用Pixel Mind Decoder时&#xff0c;可能会发现同样的输入有时会产生不同的输出质量。这就像开车时需要在速度和油耗之间找到平衡点一样&#xff0c;AI模型的参数调…...

告别Postman!用VSCode REST Client插件管理你的HTTP请求(附环境变量实战)

告别Postman&#xff01;用VSCode REST Client插件管理你的HTTP请求&#xff08;附环境变量实战&#xff09; 在开发者的日常工作中&#xff0c;API调试是不可或缺的一环。传统上&#xff0c;Postman等独立工具占据了主导地位&#xff0c;但随着开发工具链的整合趋势&#xff0…...

华为,华三交换机开启snmp的命令

华为&#xff0c;华三交换机开启snmp的命令 配置community指定版本为v2c, v3&#xff08;支持这2个版本&#xff09;指定源接口 snmp-agent snmp-agent community read public snmp-agent sys-info version v2c v3 snmp-agent protocol source-interface MEth0/0/0配置完成后&a…...

4个步骤掌握res-downloader HTTPS资源嗅探:从入门到精通

4个步骤掌握res-downloader HTTPS资源嗅探&#xff1a;从入门到精通 【免费下载链接】res-downloader 资源下载器、网络资源嗅探&#xff0c;支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gitcode.c…...

3分钟掌握Mermaid:用代码思维绘制专业图表的核心技巧

3分钟掌握Mermaid&#xff1a;用代码思维绘制专业图表的核心技巧 【免费下载链接】mermaid mermaid-js/mermaid: 是一个用于生成图表和流程图的 Markdown 渲染器&#xff0c;支持多种图表类型和丰富的样式。适合对 Markdown、图表和流程图以及想要使用 Markdown 绘制图表和流程…...

窗口大小强制调整工具终极指南:如何轻松掌控任意应用程序窗口尺寸

窗口大小强制调整工具终极指南&#xff1a;如何轻松掌控任意应用程序窗口尺寸 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些顽固的应用程序窗口而烦恼吗&#xff1f;某…...

Z-Image-Turbo镜像效果展示:孙珍妮LoRA在不同画幅(1:1/4:3/9:16)表现

Z-Image-Turbo镜像效果展示&#xff1a;孙珍妮LoRA在不同画幅&#xff08;1:1/4:3/9:16&#xff09;表现 1. 引言&#xff1a;当AI遇见明星肖像生成 你是否曾经想过&#xff0c;用AI技术生成自己喜欢的明星肖像&#xff1f;今天我们要展示的Z-Image-Turbo镜像&#xff0c;正是…...

Phi-4-Reasoning-Vision一文详解:官方Prompt规范与本地适配实践

Phi-4-Reasoning-Vision一文详解&#xff1a;官方Prompt规范与本地适配实践 1. 项目概述 Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具&#xff0c;专为双卡4090环境优化。该工具严格遵循官方SYSTEM PROMPT规范&#xff0c;…...