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

相关文章

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2