zoukankan      html  css  js  c++  java
  • JAVA_基础泛型

    泛型

    1. 所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类 型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如, 继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实 际的类型参数,也称为类型实参)。

    2. 从JDK1.5以后,Java引入了“参数化类型(Parameterized type)”的概念, 允许我们在创建集合时再指定集合元素的类型,正如:List,这表明 该List只能保存字符串类型的对象。

    JDK1.5改写了集合框架中的全部接口和类,为这些接口、类增加了泛型支持, 从而可以在声明集合变量、创建集合对象时传入类型实参。

    在集合中使用泛型:

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

    在集合中使用泛型之前的情况(以ArrayList为例)

    public void test() {
            ArrayList list = new ArrayList();
            // 要求:存放数字
            list.add(123);
            list.add(456);
            list.add(848);
            list.add(-485);
            // 问题一:类型不安全
            list.add("Tom");
            for (Object score : list) {
                // 问题二:强转时,可能出现ClassCastException异常
                int stuScore = (Integer) score;
                System.out.println(stuScore);
            }
        }
    

    在集合中使用泛型的情况(以ArrayList为例)

    public void test2() {
            ArrayList<Integer> list = new ArrayList<Integer>();
        	// JDK 7新特性:类型推断
        	// ArrayList<Integer> list = new ArrayList<>();
            list.add(85);
            list.add(75);
            list.add(15);
            list.add(-87);
            // 编译时,就会进行检查,保证数据的安全
            //list.add("Tom");
            // 方式一
            for (Integer score : list) {
                // 避免了强转操作
                int stuScore = score;
                System.out.println(stuScore);
            }
            // 方式二
            Iterator<Integer> iterator = list.iterator();
            while(iterator.hasNext()){
                System.out.println(iterator.next());
            }
        }
    

    在集合中使用泛型的情况(以HashMap为例)

    public void test3() {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        // JDK 7新特性:类型推断
        HashMap<String, Integer> map = new HashMap<>();
        map.put("Tom",87);
        map.put("Jerry",65);
        map.put("Mack",87);
        // map.put(125,"ABC");
        // 泛型的嵌套
        Set<Map.Entry<String,Integer>> entry = map.entrySet();
        Iterator<Map.Entry<String,Integer>> iterator = entry.iterator();
        while (iterator.hasNext()) {
            Map.Entry<String,Integer> e = iterator.next();
            String key = e.getKey();
            Integer value = e.getValue();
            System.out.println(key + "-----" + value);
        }
    }
    
  • 相关阅读:
    Md5
    hdu 2569 彼岸
    调用系统相机相冊
    白盒測试
    HDU 1501
    IOS常见错误分析解决(一直更新) 你值得收藏-综合贴
    读“程序猿生存定律”笔记
    Halcon导出的cpp, VC++环境配置
    POJ 1260 Pearls (动规)
    hdoj-1856-More is better【并查集】
  • 原文地址:https://www.cnblogs.com/BeautifulGirl230/p/14228268.html
Copyright © 2011-2022 走看看