• Java基础知识强化之集合框架笔记30:集合之泛型的引入


    1. 泛型的引入:

    (1)首先我们看看下面这一段代码,如下:

     1 package cn.itcast_01;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Iterator;
     5 
     6 
     7 public class GenericDemo {
     8     public static void main(String[] args) {
     9         // 创建
    10         ArrayList array = new ArrayList();
    11 
    12         // 添加元素
    13         array.add("hello");
    14         array.add("world");
    15         array.add("java");
    16         // array.add(new Integer(100));
    17         array.add(10); // JDK5以后的自动装箱
    18         // 等价于:array.add(Integer.valueOf(10));
    19 
    20         // 遍历
    21         Iterator it = array.iterator();
    22         while (it.hasNext()) {
    23             // ClassCastException
    24             // String s = (String) it.next();
    25             String s = it.next();
    26             System.out.println(s);
    27         }
    28 
    29     }
    30 }

    运行上面程序,如下:

    (2)泛型的引入:

    我们按照正常的写法来写这个程序, 结果确出错了。

      为什么呢?
           因为我们开始存储的时候,存储了String和Integer两种类型的数据。
           而在遍历的时候,我们把它们都当作String类型处理的,做了转换,所以就报错了。

    但是呢,它在编译期间却没有告诉我们

    所以,我就觉得这个设计的不好。

    回想一下,我们的数组:

    1     String[] strArray = new String[3];
    2     strArray[0] = "hello";
    3     strArray[1] = "world";
    4     strArray[2] = 10; //报错

    集合也模仿着数组的这种做法,在创建对象的时候明确元素的数据类型。这样就不会在有问题了,这种技术被称为:泛型

    2. 泛型的概述和使用:

    (1)泛型的概述:

    泛型是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。参数化类型,把类型当作参数一样的传递。

    (2)泛型的格式:

           <数据类型>

    注:此处的数据类型只能是引用类型

    (3)泛型的好处:

      • 把运行时期的问题提前到了编译期间
      • 避免了强制类型转换
      • 优化了程序设计,解决了黄色警告线

    3. 使用泛型改进1的代码,如下:

     1 package cn.itcast_01;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Iterator;
     5 
     6 
     7 public class GenericDemo {
     8     public static void main(String[] args) {
     9         // 创建
    10         ArrayList<String> array = new ArrayList<String>();
    11 
    12         // 添加元素
    13         array.add("hello");
    14         array.add("world");
    15         array.add("java");
    16         // array.add(new Integer(100));
    17         //array.add(10); // JDK5以后的自动装箱
    18         // 等价于:array.add(Integer.valueOf(10));
    19 
    20         // 遍历
    21         Iterator<String> it = array.iterator();
    22         while (it.hasNext()) {
    23             // ClassCastException
    24             // String s = (String) it.next();
    25             String s = it.next();
    26             System.out.println(s);
    27         }
    28 
    29     }
    30 }

    运行效果如下:

  • 相关阅读:
    迁移模型问题,提示admin已存在
    centos 部署的时候安装不上Mariadb,缺少依赖文件
    collections
    List里面添加子list,子list clear之后竟然会影响主List里面的内容
    Jackson用法详解
    Ouath2.0在SpringCloud下验证获取授权码
    zookeeper原理之Leader选举的getView 的解析流程和ZkServer服务启动的逻辑
    zookeeper原理之Leader选举源码分析
    Spring Integration sftp 专栏详解
    SpringMVC常用注解标签详解
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4855606.html
Copyright © 2020-2023  润新知