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

news2024/9/20 9:04:09

目录:

一、包装类:

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.coloradmin.cn/o/2082436.html

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

相关文章

82、k8s的service-NodePort端口开放和生命周期

0、单节点服务&#xff0c;以及k8s命令 [rootmaster01 ~]# kubectl create deployment nginx1 --imagenginx:1.22 --replicas3[rootmaster01 ~]# kubectl create deployment nginx1 --imagenginx:1.22 ##创建资源 deployment.apps/nginx1 created[rootmaster01 opt]# kubec…

软件设计原则之依赖倒置原则

依赖倒置原则&#xff08;Dependency Inversion Principle, DIP&#xff09;是软件设计中一个非常重要的原则&#xff0c;它属于面向对象设计的SOLID原则之一。这个原则的核心在于通过抽象来降低模块间的耦合度&#xff0c;使得系统更加灵活和可维护。 目录 依赖倒置原则的基本…

对标GPT-4o,科大讯飞正以大模型重塑语音产业

每个科技时代&#xff0c;都有每个时代的“入口”和“推手”。 在PC时代&#xff0c;浏览器和搜索引擎是主要入口&#xff0c;用户通过键盘和鼠标进行交互。移动互联时代&#xff0c;APP和应用商店成为典型入口&#xff0c;用户用手指和触摸屏进入互联网世界。而在眼下的AI时代…

8月27c++

提示并输入一个字符串&#xff0c;统计字符串中字母、数字、空格和其他字符的个数 代码 #include <iostream> #include <cstring> using namespace std;int main() {string str;cout<<"输入一个字符串";getline(cin,str);//输入字符串int lenstr…

【vulhub】Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)

简单来说就是先用序列化工具ysoserial启动一个JRMP服务&#xff0c;加载先相关漏洞利用链&#xff0c;加载你要执行的恶意代码。 并将上述结果通过序列化工具ysoserial将我们的恶意代码进行一个序列化操作。 第二步就是将我们的exp去加载ysoserial序列化后的数据&#xff0c;后…

vue侧边栏

在Vue中创建一个侧边栏&#xff08;Sidebar&#xff09;是一个常见的需求&#xff0c;特别是在构建管理界面或需要导航菜单的应用时。侧边栏通常用于展示应用的导航链接或菜单项&#xff0c;用户可以通过点击这些链接来访问应用的不同部分。 <template><el-tree :data…

openEuler安装Docker和踩坑分析

我是用的openEuler版本&#xff1a;20.03 LTS SP1&#xff0c;安装在虚拟机中&#xff0c;使用ssh连接 在openEuler上安装Docker还是让我踩了不少坑&#xff0c;先看看这些坑是如何产生的 虽然官方没有说openEuler是基于什么开源系统开发的&#xff0c;但大致内容和CentOS相似…

【教学新纪元】大学电工电子课堂大变身!SmartEDA电路仿真软件助你高效授课✨

在快速迭代的科技时代&#xff0c;教学方式的创新成为了提升教学质量的关键。作为一位深耕电工电子原理教学领域的老师&#xff0c;你是否曾梦想过将复杂的电路理论以直观、互动的方式展现给学生&#xff1f;今天&#xff0c;就让我们一起探索如何利用SmartEDA电路仿真软件&…

鸿蒙开发5.0【基于lycium的开源c库编译与集成】

场景描述 对于c库编译问题&#xff0c;应用经常会遇到如下业务诉求 场景一&#xff1a;基于HarmonyOS编译开源C库 场景二&#xff1a;开源c库编译完成后的集成 方案描述 场景一&#xff1a; 需要使用开源c库 lycium的使用说明&#xff1a;lycium的特点就是自动化编译&am…

8.28-回顾+容器与主机之间的通信+跨主机容器之间的通信

一、回顾 1.启动docker systemctl start docker 2.拉取registry docker pull registry 3.启动镜像&#xff0c;同时挂载目录&#xff08;保存镜像&#xff09;端口映射5000 docker run -d -v /regist/:/var/lib/registry/ -p5000:5000 registry:latest 4.修改/etc/docker/d…

培训第三十八天(上传镜像,私有仓库下载镜像,跨主机容器间的通信,harbor软件包下载)

1、harbor软件包下载 https://github.com/search?qharbor&typerepositories 2、出现拒绝连接错误&#xff0c;可能是由于容器没开 # 问题解决&#xff1a;[rootdocker ~]# curl localhost:5000/v2/_catalogcurl: (7) Failed connect to localhost:5000; 拒绝连接[rootdoc…

pdf怎么转换成excel?掌握好这9个pdf转换方法就够了(全)

pdf怎么转换成excel&#xff1f;日常的办公生活中&#xff0c;我们经常需要接触很多文档格式&#xff0c;而pdf格式文件因为其稳定性和安全性受到很多办公人士的喜爱。但PDF文件不能直接编辑&#xff0c;很多小伙伴们就会出现关于pdf格式转换的难题&#xff0c;比如说想把一份带…

MATLAB虫害检测预警系统

一、课题介绍 本课题是基于MATLAB颜色的植物虫害检测识别&#xff0c;可以辨析植物叶子属于是轻度虫害&#xff0c;中度虫害&#xff0c;严重虫害&#xff0c;正常等四个级别。算法流程&#xff1a;每种等级叶子分别放在同一个文件夹&#xff0c;训练得到每个文件夹每个叶…

SSL安全认证网关:保障网络安全的强大护盾

随着信息技术的飞速发展&#xff0c;我们的生活和工作越来越依赖于网络&#xff0c;但与此同时&#xff0c;网络安全威胁也日益严峻。为了保护我们的信息安全&#xff0c;各种安全技术和产品应运而生&#xff0c;其中SSL安全认证网关就是一种非常重要的安全防护工具。 今天&…

3款伪原创工具,为你轻松一键生成原创文案

在当今信息爆炸的时代&#xff0c;原创内容的重要性愈发凸显。然而&#xff0c;对于许多创作者来说&#xff0c;创作原创文案却是一项费时费力的挑战。幸运的是&#xff0c;随着科技的进步&#xff0c;现在有三款伪原创工具能够帮助你轻松一键生成原创文案&#xff0c;为你节省…

DNS服务器的配置(服务名named,端口53)

目录 前言 配置文件 DNS服务器的配置 主配置文件 扩展配置文件 区域配置文件 重启服务 配置防火墙 配置客户端dns 前言 DNS服务器的主要作用是将人类可读的域名转换为机器可读的IP地址&#xff0c;从而方便用户访问互联网资源。 在互联网中&#xff0c;设备需要通过I…

基于资源管控+TiCDC实现多业务融合容灾测试

作者&#xff1a; 数据源的TiDB学习之路 原文来源&#xff1a; https://tidb.net/blog/959b8d07 背景 金融机构越来越多的选择将多套业务系统融合到一套分布式数据库集群来支撑&#xff0c;一方面可以节约硬件成本&#xff0c;另一方面可以简化运维复杂性。多租户能力及资源…

【电控笔记z26】串级PID单环位置PID

1P-PI 传函(梅森法) : 2PI-P 3PID 三者等效

HyperMesh概述与有限元分析简介

1.1 HyperMesh 概述 本节将介绍有限单元法基本原理&#xff0c;HyperMesh 软件基本功能及界面介绍&#xff0c;获取在线帮助等内容。 1.1.1 有限元分析方法简介 有限单元法&#xff08;FEM&#xff09;是一种可以精确预测复杂结构在外界载荷作用下响应的方法&#xff0c;该数…

问界都回暖了,是谁还在持续掉队?

文/王俣祺 导语&#xff1a;在8月份的最后一个完整周&#xff0c;国内汽车市场的销量表现全面提升&#xff0c;乘用车市场销量达到了46.6万辆车&#xff0c;环比增长13.1%。其中&#xff0c;新能源汽车销量达到24.2万辆&#xff0c;环比增长11.6%&#xff0c;市场渗透率达到了…