美文网首页
Java 面试系列:为什么要使用泛型和迭代器 + 面试题

Java 面试系列:为什么要使用泛型和迭代器 + 面试题

作者: you的日常 | 来源:发表于2021-01-14 19:56 被阅读0次

    泛型

    1)为什么要用泛型?

    在泛型没有诞生之前,我们经常会遇到这样的问题,如以下代码所示:

    ArrayList arrayList = new ArrayList();
    arrayList.add("Java");
    arrayList.add(24);
    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

    at xxx(xxx.java:12)

    类型转换出错,当我们给 ArrayList 放入不同类型的数据,却使用一种类型进行接收的时候,就会出现很多类似的错误,可能更多的时候,是因为开发人员的不小心导致的。那有没有好的办法可以杜绝此类问题的发生呢?这个时候 Java 语言提供了一个很好的解决方案——“泛型”。

    2)泛型介绍

    泛型:泛型本质上是类型参数化,解决了不确定对象的类型问题。
    泛型的使用,请参考以下代码:

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

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

    报错信息如下图所示:

    enter image description here

    这样就可以避免开头示例中,类型不一致导致程序运行过程中报错的问题了。

    3)泛型的优点

    泛型的优点主要体现在以下三个方面。

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

    迭代器(Iterator)

    1)为什么要用迭代器?

    我们回想一下,在迭代器(Iterator)没有出现之前,如果要遍历数组和集合,需要使用方法。

    数组遍历,代码如下:

    String[] arr = new String[]{"Java", "Java虚拟机", "Java中文社群"};
    for (int i = 0; i < arr.length; i++) {
        String item = arr[i];
    }
    
    

    集合遍历,代码如下:

    List<String> list = new ArrayList<String>() {{
        add("Java");
        add("Java虚拟机");
        add("Java中文社群");
    }};
    for (int i = 0; i < list.size(); i++) {
        String item = list.get(i);
    }
    
    

    相关文章

      网友评论

          本文标题:Java 面试系列:为什么要使用泛型和迭代器 + 面试题

          本文链接:https://www.haomeiwen.com/subject/bimebktx.html