【Java】数据结构之泛型

泛型的引入背景:

为了能够写一个类/方法就能同时支持多种不同类型的对象

所谓的泛型,其实就是从语法层面上对 Object 进行了一个简单的包装,编译过程帮我们自动加上一些编译器的类型检查,自动帮我们完成一些类型转换工作

举个例子:

定义一个泛型类

package com.Test0825;

/**
 * Create with IntelliJ IDEA
 * Description:
 * User:Zyt
 * Date:2020-08-25
 */
public class SeqList<E> {
    //当前这个 data 的类型是啥,可以当成一个 Object[],具体代表的是那种类型
    private E[] data = (E[]) new Object[100];
    private int size;
    public E get(int index){
        return data[index];
    }
    public void add(E elem){
        data[size] = elem;
        size++;
    }

    public static void main(String[] args) {
        SeqList<String> seqList = new SeqList<>();
        //String 也是继承自 Object
        //调用 add 的时候相当于向上转型
        seqList.add("aaa");
        seqList.add("bbb");

        String str = seqList.get(0);
        

    }

}

E:是泛型参数(相当于一个形参,需要在真正对该类进行实例化的时候,确定实参),泛型参数常见的名字:E,T,KEY,VALUE……

 

泛型参数类似于一个“模板”,泛型这样的语法是一种编译期的机制,为了方便程序员书写代码,以及在编译过程进行一些类型检查操作,编译完成了之后在运行过程中,是没有泛型的,编译代码过程中,直接把泛型参数就当成了 Object,只不过编译期自动加上了一下类型转换操作以及类型校验操作

如果是 int double 这些基础类型如何套用到泛型中?

用基础库中的包装类

基本数据类型

包装类

byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

包装类首字母都要大写,只有char 和 int 类型区别比较大需要注意

 

举个例子

这个操作相当于把 int 转换成 Integer 就是装箱(boxing)

或者用下面的三种方式

 

而将 Integer 转换回 int 就叫做拆箱(unboxing)

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值