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

2024-08-28 11:52

本文主要是介绍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-数据结构-包装类和认识泛型 !!!∑(゚Д゚ノ)ノ的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114695

相关文章

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为