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

相关推荐
湫ccc5 分钟前
《Python基础》之基本数据类型
开发语言·python
Matlab精灵6 分钟前
Matlab函数中的隐马尔可夫模型
开发语言·matlab·统计学习
Microsoft Word7 分钟前
c++基础语法
开发语言·c++·算法
数据小爬虫@9 分钟前
如何利用java爬虫获得淘宝商品评论
java·开发语言·爬虫
喜欢猪猪11 分钟前
面试题---深入源码理解MQ长轮询优化机制
java
qq_1728055917 分钟前
RUST学习教程-安装教程
开发语言·学习·rust·安装
wjs202425 分钟前
MongoDB 更新集合名
开发语言
monkey_meng28 分钟前
【遵守孤儿规则的External trait pattern】
开发语言·后端·rust
草莓base41 分钟前
【手写一个spring】spring源码的简单实现--bean对象的创建
java·spring·rpc
legend_jz1 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法