数据结构算法——泛型

泛型

泛型的优点: 1.类型检查 2.不用类型的强转

1.泛型编程的类型擦除机制是什么? 编译器编译代码的过程中,用用户指定的具体类型,检查方法中所有的泛型参数,看类型是否匹配,如果不匹配,编译报错;如果匹配,最终泛型都被擦除为Object类型

(1) 如下是一个没有使用泛型的集合及其代码实现:

package test;

import org.junit.Test;

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

public class TestGeneric {
          
   
    @Test
    public void test1(){
          
   
       List list = new ArrayList();
       list.add(190);
       list.add(180);
       list.add(162);
       //风险1:没有使用泛型,任何Object及其子类的对象都可以添加进来
       list.add(new String("AA"));
       for (int i=0;i<list.size();i++){
          
   
           //风险2:强转为int型时,可能报ClassCastException的异常
           int score =(Integer) list.get(i);
           System.out.println(score);
       }
    }
}

运行结果如下: (2)接下来我们在集合中使用泛型,代码实现如下:

@Test
    public void test2(){
          
   
        List<Integer> list = new ArrayList<Integer>();
        list.add(87);
       // list.add("AA");
        for (int i=0;i<list.size();i++){
          
   
            int score =list.get(i);
            System.out.println(score);
        }
    }

此处还有另一种遍历方式:

Iterator<Integer> iter = list.iterator();
        while (iter.hasNext()){
          
   
            System.out.println(iter.next());
        }

运行结果如下: (3)我们接下来在Map中使用泛型进行示范:

@Test
    public void test3(){
          
   
        Map<String,Integer> map = new HashMap<>();
        map.put("AA",18);
        map.put("BB",19);
        map.put("CC",20);
        Set<Map.Entry<String,Integer>> set = map.entrySet();
        for (Map.Entry<String,Integer> o:set){
          
   
            System.out.println(o.getKey()+"===="+o.getValue());
        }

    }
经验分享 程序员 微信小程序 职场和发展