Java高级Day25-泛型

79.泛型

传统方法的问题:

  1. 不能对加入到集合的ArrayList中的数据类型进行约束(不安全)

  2. 遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响

泛型:

  1. 当我们 ArrayList<Dog> 表示存放到 ArrayList 集合中的元素是Dog类型

  2. 如果编译器发现添加的类型,不满足要求,就会报错

  3. 在遍历的时候,可以直接取出 Dog 类型而不是 Object

  4. 编译时,检查元素的添加,提高了安全性

  5. 减少了类型转换的次数,提高效率

  6. public class ArrayList<E> {} E称为泛型,那么Dog->E

不使用泛型:Dog->加入->Object->取出->Dog //放入到ArrayList会先转成Object,在取出时,还需要转换成Dog

使用泛型:Dog->加入->Dog->取出->Dog //放入时和取出时,不需要类型转换,提高效率

泛型介绍:

  1. 泛型又称参数化类型,是JDK5.0出现的新特征,解决数据类型的安全性问题

  2. 在类声明或实例化时只要指定好需要的具体的类型即可

  3. Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCaastException异常。同时,代码更简洁、健壮

  4. 泛型的作用是:可以在类声明时通过一个标识表示某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型

复制代码
//泛型的作用是:可以在类声明时期通过一个标识表示类中某个属性的类型
//或者是某个方法的返回值的类型,或者是参数类型
class Person<E> {
    E s;//E表示 s 的数据类型,该数据类型在定义Person对象的时候指定,即在编译期间,就确定E是什么类型
    
    public Person(E s){//E也可以是参数类型
        this.s = s;
    }
    
    public E f(){//返回类型使用E
        return s;
    }
    
    public void t(){
        System.out,println(s.getClass()); //显示s的运行类型
    }
}

泛型的实例化:

要在类名后面指定类型参数的值。如:

复制代码
List<String> strList = new ArrayList<String>();
Iterator<Customer> iterator = customers.iterator();

泛型使用细节:

  1. interface List<T>{} , public class HashSet<E>{}..等等,T,E只能说引用类型,不能是基本数据类型

  2. 在指定泛型具体类型后,可以传入该类型或其子类类型

  3. 泛型使用形式

    复制代码
    List<Integer>list1 = new ArrayList<Integer>();
    List<Integer>list2 = new ArrayList<>();
    //若以下情况,默认给它的泛型是<E> E就是Object
    List list3 = new ArrayList();
相关推荐
AI你一生一世2 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
布莱克6052 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
云-缩影2 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
LabVIEW开发2 小时前
LabVIEW 局部变量为何引发竞争条件?四种同步机制
开发语言·labview
瑞克-桑切斯2 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
benchmark_cc3 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
Zenova EdgeOS4 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
取名真是4 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
FRing035 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
Fatbobman(东坡肘子)6 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift