Java 泛型概念梳理

Java泛型

泛型介绍

泛型本质上是类型参数化,解决了不确定对象的类型问题。
在没有泛型的情况下,看下面这段代码:

ArrayList arrayList = new ArrayList();
arrayList.add("Java");
arrayList.add(100);
for (int i = 0; i < arrayList.size(); i++) {
    String str = (String) arrayList.get(i);
    System.out.println(str);
}

虽然能编译通过但在运行起来时会报
Exception in thread “main” java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 错误

类型转换出错,当我们给 ArrayList 放入不同类型的数据,却使用一种类型进行接收的时候,就会出现很多类似的错误,这个时候 Java 语言提供了一个很好的解决方案——“泛型”。

ArrayList<String> arrayList = new ArrayList();
arrayList.add("Java");

这个时候如果给 arrayList 添加非 String 类型的元素,编译器就会报错,提醒开发人员插入相同类型的元素。

泛型的优点

  • 安全:不用担心程序运行过程中出现类型转换的错误。
  • 避免了类型转换:如果是非泛型,获取到的元素是 Object 类型的,需要强制类型转换。
  • 可读性高:编码阶段就明确的知道集合中元素的类型。

迭代器

迭代器是用来遍历容器内所有元素对象的,也是一种常见的设计模式。需要注意的是迭代器返回对象的类型为Object,也就是说next()可以接收任何类型的对象。

迭代器包含以下四个方法。

  • hasNext():boolean —— 容器内是否还有可以访问的元素。
  • next():E —— 返回下一个元素。
  • remove():void —— 删除当前元素。
  • forEachRemaining(Consumer<? super E>):void —— JDK 8 中添加的,提供一个 lambda 表达式遍历容器元素。

使用如下:

List<String> list = new ArrayList<String>() {{
    add("1");
    add("2");
    add("3");
}};
Iterator iterator =  list.iterator();
// 遍历
while (iterator.hasNext()){
    String str = (String) iterator.next();
    if (str.equals("2")){
        iterator.remove();
    }
}
System.out.println(list);

执行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值