1.泛型的定义

将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性,这就是泛型。

泛型的定义语法格式如下:
类1或者接口<类型实参>对象=new类2<类型实参>()
tips:首先,"类2"可以是"类1"本身,可以是"类1"的子类,还可以是接口的实现类;其次,"类2"的类型实参必须与"类1"中的类型实参相同。

底层原理
底层原理

2.泛型在集合中的应用

在List接口中,其add()方法的参数是Object类型,不管把什么对象放入List接口及其子接口或实现类中,都会被强制转换为Object类型。在通过get()方法取出集合中元素时必须进行强制类型转换,不仅繁琐而且容易出现ClassCastException异常。Map接口中使用put()方法和get方法存取对象时,以及使用Iterator的next()方法获取元素时存在同样的问题。JDK1.5通过引入泛型有效地解决了这个问题。JDK1.5中以及改写了集合框架中所有接口和类,增加了对泛型的支持,也就是泛型集合。使用泛型集合在创建集合对象时指定集合中元素的类型,从集合中取出元素时无需进行强制类型转换,并且如果把非指定类型对象放入集合,会出现编译错误。
List和ArrayList的泛型形式时List和ArrayList,两者常用方法基本一样。

示例1:ArrayList的泛型形式对比

使用泛型前

package top.xiaoguyouqu.shangke;

import java.util.ArrayList;
import java.util.List;

public class fanxing {
    public static void main(String[] args) {
        //使用泛型前
        NewTitle NBA = new NewTitle(1, "保罗乔治", "小明");
        NewTitle CBA = new NewTitle(2, "郭艾伦1", "小利");

        List newTitles = new ArrayList();

        newTitles.add(NBA);
        newTitles.add(CBA);

        System.out.println("---------输出---------");
        for (Object obj:newTitles){
            NewTitle title = (NewTitle)obj;
            System.out.println(title.getName());
        }
        System.out.println("---------输出---------");
    }
}

使用泛型后

package top.xiaoguyouqu.shangke;

import java.util.ArrayList;
import java.util.List;

public class fanxing {
    public static void main(String[] args) {
        //使用泛型前
        NewTitle NBA = new NewTitle(1, "保罗乔治", "小明");
        NewTitle CBA = new NewTitle(2, "郭艾伦1", "小利");

        List<NewTitle> newTitles = new ArrayList<NewTitle>();

        newTitles.add(NBA);
        newTitles.add(CBA);

        System.out.println("---------输出---------");
        for (NewTitle title:newTitles){
            System.out.println(title.getName());
        }
        System.out.println("---------输出---------");
    }
}

运行结果

运行结果

tips:List和ArrayList关系

List 是一个接口,它定义了一个用于表示多个元素的序列,但不直接包含具体的实现代码。
ArrayList 是 List 接口的一个具体实现类,负责执行接口所规定的功能,如添加、删除、查找和修改元素等。


示例2:HashMap的泛型形式对比

使用泛型前

package top.xiaoguyouqu.shangke;

import java.util.HashMap;
import java.util.Map;

public class hashfanxing {
    public static void main(String[] args) {
        student s1 = new student("小明",19,88);
        student s2 = new student("小李",20,98);
        
        //使用泛型前
        Map students = new  HashMap();
        
        students.put("jake",s1);
        students.put("joker",s2);

        System.out.println("--------输出----------");
        for (Object value:students.values()){
            student s = (student)value;
            System.out.println("姓名:"+s.getName());
        }
        System.out.println("------------------------");
        
    }
}

使用泛型后

package top.xiaoguyouqu.shangke;

import java.util.HashMap;
import java.util.Map;

public class hashfanxing {
    public static void main(String[] args) {
        student s1 = new student("小明",19,88);
        student s2 = new student("小李",20,98);

        //使用泛型前
        Map<String,student> students = new  HashMap<String,student>();

        students.put("jake",s1);
        students.put("joker",s2);

        System.out.println("--------输出----------");
        for (student value:students.values()){
            System.out.println("姓名:"+value.getName());
        }
        System.out.println("------------------------");

    }
}

运行结果

运行结果

最后修改:2024 年 03 月 09 日
如果你觉得作者像乞讨的,你可以随意打赏他一点。