泛型

1.集合接口或集合类在jdk5时都修改为带泛型的结构。
2.在实例化集合类时,可以指明具体的泛型类型
3.指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法、构造器,属性等)使用到类的泛型的位置,都指定为实例化的泛型类型。
4.注意点:泛型的类型必须是类,不能是基本数据类型。需要用到基本数据类型的位置,拿包装类来替换。
5.如果实例化时,没有指明泛型的类型。默认类型为java.Lang.object类型。

 HashMap<Integer,String> map1 = new HashMap<>();
        map1.put(1,"a");
        map1.put(2,"b");
        map1.put(3,"c");
        System.out.println(map1);
        HashMap<Integer,String> map2 = new HashMap<>();
        map2.put(1,"x");
        map2.put(2,"y");
        map2.put(3,"z");
        HashSet<Object> obj = new HashSet<>();
        obj.add(map1);
        obj.add(map2);
        ArrayList<Object> o = new ArrayList<>();
        o.add(obj);
        System.out.println(obj);
        System.out.println(o);
        System.out.println("------------");
        //泛型的嵌套
        Set<Map.Entry<Integer, String>> set1 = map1.entrySet();
        Set<Map.Entry<Integer, String>> set2 = map2.entrySet();
        ArrayList<Object> a = new ArrayList<>();
        a.add(set1);
        a.add(set2);
        //遍历
        Iterator<Object> iterator = a.iterator();
        while (iterator.hasNext()){
            Object next = iterator.next();
            System.out.println(next);
//            Integer key = next.getKey();
//            String value = next.getValue();
//            System.out.println(key+"--"+value);
        }
        System.out.println("-------------------");
        Set<Integer> integers = map1.keySet();
        //增强for
        for (Integer s:integers){
            String s1 = map1.get(s);
            System.out.println(s+" "+s1);
        }
 /*创建集合对象,使用泛型
    好处:
        1 .避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
        2.把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)
    弊端:
        泛型是什么类型,只能存储什么类型的数据
    */
    private static void show2() {
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
//        list.add(123);//报错不能往里放除了string以外的类型
        //增强for
        for (String s:list){
            System.out.println(s);
        }
        System.out.println("--------------------");
        //使用迭代器
        Iterator<String> i = list.iterator();
        while (i.hasNext()){
            String s = i.next();
            System.out.println(s+"      cd:"+s.length());
        }
    }

    /*创建集合对象,不使用泛型
    好处:
        集合不使用泛型,默认的类型就是object类型,可以存储任意类型的数据
    弊端:
        不安全,会引发异常
    */
    private static void show1() {
        ArrayList list = new ArrayList();
        list.add("abc");
        list.add(123);
        //使用迭代器遍历集合1.创建迭代器2.使用hasNext和next进行遍历
        Iterator i = list.iterator();//1
        while (i.hasNext()){//2
            Object o = i.next();//存入的是object,取出的也是object
            System.out.println(o);
            //想要使用string类特有的方法, Length获取字符串的长度;不能使用多态 object obj = "abc";
            // 需要向下转型
            //会抛出ClassCastException类型转换异常,不能把Integer类型转换为string类型
            String s=(String) o;
            System.out.println(s.length());
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值