JAVA高级复习-泛型的使用

1、JDK5.0新增的特性

2、在集合中使用泛型

总结:

① 集合接口 或 集合类在JDK5.0时都修改为带泛型的结构

② 在实例化集合类时,可以指明具体的泛型类型

③ 指明完以后,在集合类 或 接口中,凡是定义类 或 接口时,内部结构(比如:方法、构造器、属性等)使用到类的泛型的位置,都指定为实例化的泛型类型。比如:add(E e) --> 实例化以后:add(Integer e)

④ 注意点:泛型的类型必须是类,不能是基本数据类型,需要用到基本数据类型的位置,拿其对应的包装类替换

public class GenericTest {

    /**
     * 在集合中不使用泛型可能出现的问题
     */
    @Test
    public void test01(){
        List list = new ArrayList<>();
        list.add(1);
        list.add(2);
        //问题一:类型不安全
        list.add("好的");

        for (Object obj : list) {
            //问题二:强转时,出现ClassCastException
            Integer num = (Integer) obj;
            System.out.println(num);
        }
    }

    /**
     * 在集合中使用泛型,以ArrayList为例
     */
    @Test
    public void test02() {
        //泛型的数据类型不能是基本数据类型,所以下面的注释掉的是错误的
//        List<int> list = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        //泛型自带类型检查,编译时,就会进行类型检查,保证数据的安全
//        list.add("好的");
        for (Integer obj : list) {
            //泛型避免了强转操作
            Integer num =  obj;
            System.out.println(num);
        }
    }

    /**
     * 在集合中使用泛型,以HashMap为例
     */
    @Test
    public void test03() {
        Map<String, Integer> map = new HashMap<>();
        map.put("TOM", 1);
        map.put("JACK", 2);
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, Integer> next = iterator.next();
            String key = next.getKey();
            Integer value = next.getValue();
            System.out.println(key);
            System.out.println(value);
        }
    }

}
原文地址:https://www.cnblogs.com/elnimo/p/13648921.html