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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java Stream流式编程
  • 小程序自定义组件配合插槽和组件传值
  • 重生之我们在ES顶端相遇第11 章 - 深入自定义语言分词器
  • centos 系统yum 安装 mariadb
  • 书生大模型实战营基础(3)——LangGPT结构化提示词编写实践
  • C#基础(2)枚举
  • Linux系统安装MySQL8.0
  • ES6更新的内容中什么是proxy
  • 力扣8.29
  • React多功能管理平台项目开发全教程
  • C++ | Leetcode C++题解之第387题字符串中的第一个唯一字符
  • Go入门:gin框架极速搭建图书管理系统
  • MySQL:复合查询
  • 深度学习(二)
  • minio最新源码编译(处理安全扫描中跨域访问、.js.map等不安全问题)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Android Volley源码解析
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Angular 4.x 动态创建组件
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • js写一个简单的选项卡
  • Linux gpio口使用方法
  • Nodejs和JavaWeb协助开发
  • PHP那些事儿
  • ------- 计算机网络基础
  • 简单基于spring的redis配置(单机和集群模式)
  • 力扣(LeetCode)22
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 小程序 setData 学问多
  • 移动端解决方案学习记录
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • mysql面试题分组并合并列
  • postgresql行列转换函数
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 阿里云重庆大学大数据训练营落地分享
  • 交换综合实验一
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​补​充​经​纬​恒​润​一​面​
  • ​一些不规范的GTID使用场景
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # Panda3d 碰撞检测系统介绍
  • #define、const、typedef的差别
  • #java学习笔记(面向对象)----(未完结)
  • #pragma 指令
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (C语言)球球大作战
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Matlab)使用竞争神经网络实现数据聚类
  • (分布式缓存)Redis分片集群
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (转)linux 命令大全
  • ******之网络***——物理***