Java-数据结构-包装类和认识泛型 !!!∑(゚Д゚ノ)ノ

目录:

一、包装类:

1、基本数据类型所对应的包装类:

2、装箱和拆箱:

二、 泛型:

1、什么是泛型:

2、语法:

三、泛型类的使用:

四、裸类型:

五、泛型的擦除机制:

六、泛型的上界: 

七、泛型方法:

八、 小结:

九、总结:


一、包装类:

      在 Java 中,由于基本数据类型不是继承 Object ,为了在泛型代码中可以支持基本数据类型,所以Java给每个数据类型都有一个对应的包装类。  


1、基本数据类型所对应的包装类:


2、装箱和拆箱:

     装箱也叫装包:其分为 自动装箱 和 显示装箱。

     那么什么是装箱:就是把基本数据类型变为包装类的过程称之为装箱。

我们先来看看装箱的代码:

 

  那么这里可能就有疑问了,那我们的自动装箱是怎样进行的呢,我们来看看它的底层:

    拆箱也叫拆包:其也是分为两中 自动拆箱 和 显示拆箱

    那么什么是拆箱:就是把包装类变成的过程称之为装箱。

我们来看看拆箱的代码:

 我们再来看看其中的底层代码:

我们来看一个有趣的代码:

 我们看到这就有意思了,为什么126就是相等,但是到129就不相等了呢?

  这个我们就要看 Integer 的装箱代码了:

由此我们可以看出,Integer的装箱只能装-127——128的,超过这个就是创建一个新对象了


二、 泛型:

1、什么是泛型:

    对于泛型就是:使用与许多许多类型。

从代码上来说呢,就是对类型实现了参数化。

泛型的引出:

     对于引出泛型,我们来实现一个类,类中包含一个数组成员,使得数组中可以存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值。

     在这里呢,我们用 Object类 来进行创建数组,Object是所有类的父类,

   但是呢,我们在这里呢就有一些问题,我们来看看:

1、在这里呢,我们这个数组当中可以存放任何类型

2、我们每次进行的到值时候呢,都要进行强转

        那么这就有问题了,当我们存储的数据很多的时候呢,当我们不知道是什么类型的时候呢,我们还需要去找它属于什么类型,这就很麻烦了,而且这个数组里面的类型是非常的乱的。

         所以呢,我们有没有办法让编译器来转型,并且呢我们有时要存储一种类型,而非存储多种类型,这时候呢就需要用到我们的泛型了。

       泛型的主要目的:就是指定当前的容器,要持有什么类型的对象,让编译器去做检查,                                      我们使用者不用关心,不需要尽心类型的强转。

2、语法:

 在我们看语法之间我们先看看实例代码:

    我们上面蓝色的组成就是泛型了,我们是不是有一些疑问对于这个代码?不要急我们马上就能知道了。

   1、在 class MyArray类后面的的 <E> 代表占位符,表示当前类为泛型类。

  那么我们 <> 中的E有时什么呢?类型形参一般使用一个大写字母表示,我们常见为:

       E : Element //元素

       T :Type  //类型

       K :Key  //当我们分享到Map会用到

       V : Value //当我们分享到Map会用到

       N : Nmber

       S、U等等,我们往后再介绍

    

       我们这里要注意的是对于我们传类型的时候,我们一定要用包装类,用基本数据类型会报错。

语法:

 class 泛型类名称<类型参数列表> {

}

class 泛型类名称<类型参数列表> extends 继承类 {

}


三、泛型类的使用:

语法与示例:

语法:

     泛型类<类型实参> 变量名 = new 泛型类<类型实参>(这里的类型实参可写可不写)

示例:

      MyArray<Integer> myArray = new MyArray<>();

这里我们再次提醒一次:

         所有的泛型只能接收类,所有的基本数据类型,必须使用包装类类型。


四、裸类型:

  裸类型是只没有类型实参的泛型类,比如我们 :


五、泛型的擦除机制:

   对于泛型是一种编译时期的机制,在我们运行时期是没有的,那么它又是怎么运行的呢?

这里呢,就用到了一种机制,称为擦除机制:

    在编译过程中,将左右的<T> 替换成Object类的这种机制,称之为擦除机制。


六、泛型的上界: 

      在我们定义泛型的时候呢,有时候呢,我们需要对传入的类型变量做一定的约束,我们可以通过对类型的边界进行约束。

语法:

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

}

我们来看一个例子:

 

这样的结果会是什么呢?我们来看:

当我们没有定义其上界的时候呢,我们的上界有是什么呢?当我们没有定义上界的时候,我  们的E默认继承Object类。

我们来看一个实例:

       这个呢,我们也是熟悉的,就是对于引用类型的比较方法我们需要继承Comparable接口,我们来看看: 


七、泛型方法:

语法:

方法修饰限定符  <类型形参列表>  返回值类型  方法名称(形参列表) {

//方法体

我们来看看实例:

      那么看到这又有可能有一个疑问,我们每次都要泛型方法的时候呢,我们都要进行对象的创建,那么我们能不能不创建对象,还可以调用泛型方法呢?可以,我们可以把其方法设置为静态方法:


八、 小结:

1、泛型是将参数类型进行参数化,进行传递

2、使用 <T> 代表的是当前类是泛型类

3、目前的优点:数据类型参数化,在编译时自动进行类型转换和检查


九、总结:

     OK,我们的这次关于包装类和泛型的 博客就到这里就结束了,我们的泛型在数据结构中非常之重要,我们要好好的理解泛型,接下来我们就开始介绍数据结构中的线性表了,让我们期待下次见面!!!拜拜~~~

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

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

相关文章

[oeasy]python031_[趣味拓展]unix起源_Ken_Tompson_Ritchie_multics

[趣味拓展]unix起源_Ken_Tompson_Ritchie_multics &#x1f94b; 回忆上次内容 上次 动态设置了 断点 断点 可以把代码 切成一段一段的可以 更快地调试 调试的目的 是 去除 bug 别害怕 bug 一步步 总能找到 bug这 就是 程序员基本功 调试 debug 在bug出现的时候 甚至…

Python 变量类型

Python 变量类型 变量赋值 多个变量赋值 标准数据类型 Python 数字 Python字符串 Python列表 Python 元组 Python 字典 Python数据类型转换 Python 变量类型 变量是存储在内存中的值&#xff0c;这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型…

【视频讲解】主成分分析原理与水果成熟数据实例:Python中PCA-LDA 与卷积神经网络CNN...

全文链接&#xff1a;https://tecdat.cn/?p37450 分析师&#xff1a;Shixian Ding 主成分分析&#xff08;PCA&#xff09;作为数据科学中用于可视化和降维的重要工具&#xff0c;在处理具有大量特征的数据集时非常有用。就像我们难以找到时间阅读一本 1000 页的书&#xff0…

实现流程化办公,可专注于开源可视化报表设计器!

近日&#xff0c;有很多粉丝和朋友们会问我们关于低代码技术平台、开源可视化报表设计器的相关内容和问题。其实&#xff0c;在流程化办公新时代&#xff0c;愿意启用新软件平台的客户朋友会收获市场红利&#xff0c;也会站在前沿之地上斩获更多市场份额。今天我们就一起来了解…

随机森林与线性回归

集成学习方法之随机森林 集成学习&#xff08;Ensemble Learning&#xff09;是一种通过组合多个分类器来提高预测性能的方法。主要分为三种类型:Bagging、Boosting和Stacking。以下是集成学习的基本步骤和概念&#xff1a; 1数据采样&#xff1a;从训练集中有放回地随机抽取…

【渗透测试】ATTCK靶场一,phpmyadmin,域渗透,内网横向移动攻略

前言 博客主页&#xff1a;h0ack1r丶羽~ 从0到1~ VulnStack&#xff0c;作为红日安全团队匠心打造的知识平台&#xff0c;其独特优势在于全面模拟了国内企业的实际业务场景&#xff0c;涵盖了CMS、漏洞管理及域管理等核心要素。这一设计理念源于红日安全团队对ATT&CK红队评…

斯坦福大学cs231n (图像分类)

1.介绍 当作图像分类时&#xff0c;分类系统接收一些分类图像&#xff0c;比如猫咪。并且系统清楚了一些已经确定了分类或者标签的集合。那么&#xff0c;计算机的工作就是根据图片&#xff0c;给他分配一些固定的分类或者标签。 对于一个计算机来说&#xff0c;这是一个非常…

springsecurity 在web中如何获取用户信息(后端/前端)

一、SecurityContextHolder 是什么 SecurityContextHolder用来获取登录之后用户信息。Spring Security 会将登录用户数据保存在Session中。但是&#xff0c;为了使用方便,Spring Security在此基础上还做了一些改进&#xff0c;其中最主要的一个变化就是线程绑定。当用户登录成功…

FastGPT如何增减用户

背景 开源版本的FastGPT默认只有一个超级用户root&#xff0c;为了更好地管理应用和知识库&#xff0c;可以通过操作MongoDB数据库来增加新的用户和团队。 所需环境 已安装并运行的FastGPT实例MongoDB客户端工具&#xff08;如Mongo Shell或Robo 3T等&#xff09; 操作步骤…

数据库三大范式

三大范式 一种数据库设计理念&#xff0c;意义在于降低耦合 写代码 高内聚 低耦合 一个表只有一个主键 一个主键可以是多列 ‌第一范式&#xff08;1NF&#xff09;‌&#xff1a;要求数据库表的每一列都是不可分割的原子数据项&#xff0c;即列中存储的数据是最小的数据单元&…

并发服务器

一、服务器 1.单循环服务器&#xff1a;同一时刻&#xff0c;只能处理一个客户端的任务&#xff1b; 2.并发服务器&#xff1a;同一时刻&#xff0c;可以处理多个客户端的任务&#xff1b; 3.TCP并发服务器&#xff1a; &#xff08;1&#xff09;多进程: &#xff08;2&a…

搭建面向切面编程项目

此项目在整合Mybatis基础上修改&#xff0c;可参考主页的整合Mybatis文章 注解版本 第一步 引入maven坐标 <!-- 切面编程所需jar包--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId>…

Windows 11系统 Eclipse 2024版本安装教程和环境搭建

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 Eclipse 是一个开源的集成开发环境 (IDE)&#xff0c;主要用于 Java 开发&#xff0c;但也支持其他编程语言如 C、Python 和 PHP。它提供了丰富的工具和插件&#xff0c;用于编写、调试和管理代码&#x…

安卓13 背光反向 亮度反向 android13 backlight reverse

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码分析 4.代码修改 5.彩蛋 1.前言 有些设备,在调整背光的时候,会发现,背光调大,显示亮度反而变暗,背光调小,亮度变亮。这是由于PWM背光本身并没有一个标准去决定怎么样算是高亮度,怎么算是低亮度。因…

《黑神话·悟空》是用什么编程语言开发的?

最近火爆全球的国产 3A 大作《黑神话悟空》&#xff0c;你玩了吗&#xff1f;没玩没关系&#xff0c;有人就是对游戏不感冒&#xff0c;我找了个宣发片&#xff0c;一起感受下3A大作的视觉冲击&#xff0c;而且还是我们从小听到大&#xff0c;那猴子&#x1f412;的故事。 ‌‌…

Onnx使用预训练的 ResNet18 模型对输入图像进行分类,并将分类结果显示在图像上

目录 一、整体功能概述 二、函数分析 2.1 resnet() 函数&#xff1a; 2.2 pre_process(img_path) 函数&#xff1a; 2.3 loadOnnx(img_path) 函数&#xff1a; 三、代码执行流程 一、整体功能概述 这段代码实现了一个图像分类系统&#xff0c;使用预训练的 ResNet18 模型对…

设计模式26-解析器模式

设计模式26-解析器模式 动机定义与结构定义结构 C代码推导代码说明 优缺点应用总结 动机 在软件构建过程中&#xff0c;如果某一特定领域的问题比较复杂&#xff0c;类似结构会不断重复的出现。如果使用普通的编程方式来实现&#xff0c;将面临非常频繁的变化。 在这种情况下&…

无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能

无人机 PX4 飞控 | ROS应用层开发&#xff1a;指令&#xff08;字符串&#xff09;订阅功能 指令&#xff08;字符串&#xff09;订阅功能代码测试 指令&#xff08;字符串&#xff09;订阅功能 为了通过键盘触发mavros 的不同功能&#xff0c;需要实现一个订阅字符串的功能 该…

【国外比较权威的免费的卫星数据网站】

国外比较权威的免费卫星数据网站有多个&#xff0c;它们各自在数据覆盖范围、分辨率、以及数据种类等方面具有不同的特点和优势。以下是一些推荐的网站&#xff1a; NASA Worldview 网址&#xff1a;https://worldview.earthdata.nasa.gov/简介&#xff1a;NASA Worldview显示…

p10 容器的基本命令

首先先拉取一个centos的镜像 命令&#xff1a;docker pull centos 新建容器并且启动 这里直接参考老师的命令吧 接下来是启动并且进入到容器当中去输入docker run -it centos /bin/bash这里是以交互的方式进入到容器中可以看到接下来的ls命令输出的东西就是一个Linux系统最…