美文网首页
JAVA泛型的使用(1)

JAVA泛型的使用(1)

作者: GoLearning轻松学 | 来源:发表于2022-01-11 13:17 被阅读0次
       /**
     * JDK1.5前不支持泛型,那时候的泛型是这样的
     */
    public static void notUseGeneric(){
        List list = new ArrayList();//没有泛型时,可添加所有类型
        list.add("爷爷今年");
        list.add(89);
        list.add("岁了");
    
        String s1 = (String) list.get(0);
        System.out.println(s1);
        //String age = (String) list.get(1); //会报类型转换异常class java.lang.Integer cannot be cast to class java.lang.String
        //System.out.println(age);
        Integer age2 = (Integer) list.get(1);
        System.out.println(age2+"");
        String s2 = (String) list.get(2);
        System.out.println(s2);
    
    }
    

    输出结果:
    爷爷今年
    89
    岁了

    /**
     * JDK1.5后支持泛型
     */
    public static void useGeneric(){
        //使用泛型后<>内表示限定集合中只能放某种类型的元素
        List<String> list = new ArrayList<>();
        list.add("奶奶今年");
        //list.add(85); //这里输入int,编译器会报红,提示只能输入String类型
        list.add("85");
        list.add("岁");
        System.out.println(list.get(0));
        System.out.println(list.get(1));
        System.out.println(list.get(2));
    }
    

    输出结果:
    奶奶今年
    85

    使用了泛型无需进行强转

    ===================================================
    在集合中使用泛型

     /**
         * 在集合中使用泛型
         */
        public static void genericInColection() {
            Set<Integer> integers = new HashSet<>();
            integers.add(1);
            integers.add(2);
            integers.add(3);
            //迭代器遍历
            System.out.println("===================迭代器遍历===================");
            Iterator<Integer> iterator = integers.iterator();
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }
            System.out.println("===================迭代器遍历===================\n");
            System.out.println("===================foreach遍历===================");
            //foreach遍历
            //Integer:表示集合中元素类型,integer:集合中每个元素的代称 integers:表示你要遍历的集合
            for (Integer integer : integers) {
                System.out.println(integer);
            }
            System.out.println("===================foreach遍历===================\n");
    
    
            System.out.println("===================map中的泛型===================");
            Map<Integer, String> maps = new HashMap<>();
            maps.put(1, "林冲");
    //        maps.put("2","李逵");//key在泛型声明中是使用Integer,put的时候不能用String
            maps.put(2, "李逵");
            maps.put(3, "鲁智深");
            Set<Map.Entry<Integer, String>> sets = maps.entrySet();
            for (Map.Entry<Integer, String> set : sets) {
                System.out.println("key为:" + set.getKey() + " " + "value为:" + set.getValue());
            }
            System.out.println("===================map中的泛型===================\n");
            //泛型不接受8中基本数据类型,必须申明引用类型
            // List<int> list = new ArrayList<>(); //编译时报错,int是基本类型
    
            //Apple继承Fruit,但List<Apple>和List<Fruit>没有继承关系
            //List<Fruit> list = new ArrayList<Apple>();
            List<Fruit> list = new ArrayList<>();
        }
    

    输出结果:
    ===================迭代器遍历===================
    1
    2
    3
    ===================迭代器遍历===================

    ===================foreach遍历===================
    1
    2
    3
    ===================foreach遍历===================

    ===================map中的泛型===================
    key为:1 value为:林冲
    key为:2 value为:李逵
    key为:3 value为:鲁智深
    ===================map中的泛型===================

    交换数组里两元素的位置

    交换Integer数组里两元素的位置

        /**
         * 交换Integer数组里两元素的位置
         * @param intArr 数组
         * @param index1 元素的下标
         * @param index2 元素的下标
         */
        public static void changeIntArrPos(Integer[] intArr ,int index1,int index2){
            System.out.println("==================交换Integer数组里两元素的位置==========================");
            int temp = intArr[index1];
            intArr[index1] = intArr[index2];
            intArr[index2] = temp;
            System.out.println(Arrays.toString(intArr));
            System.out.println("==================交换Integer数组里两元素的位置==========================\n");
    
        }
    

    交换String数组里两元素的位置

        /**
         * 交换String数组里两元素的位置
         * @param strArr 数组
         * @param index1 元素的下标
         * @param index2 元素的下标
         */
        public static void changeStringArrPos(String[] strArr ,int index1,int index2){
            System.out.println("==================交换String数组里两元素的位置==========================");
            String temp = strArr[index1];
            strArr[index1] = strArr[index2];
            strArr[index2] = temp;
            System.out.println(Arrays.toString(strArr));
            System.out.println("==================交换String数组里两元素的位置===========================\n");
    
        }
    

    用泛型方法交换数组里两元素的位置

        /**
         * 用泛型方法交换数组里两元素的位置
         * @param arr 数组
         * @param index1 元素的下标
         * @param index2 元素的下标
         */
        public static <T> void changeArrPos(T[] arr , int index1, int index2){
    
            T temp = arr[index1];
            arr[index1] = arr[index2];
            arr[index2] = temp;
            System.out.println(Arrays.toString(arr));
    
    
        }
    
            //交换String数组里两元素的位置
            String[] strArr = {"我爷爷","今年","89岁了"};
            changeStringArrPos(strArr,0,2);
            //交换String数组里两元素的位置
            Integer[] intArr = {2,5,8,9,6,7};
            changeIntArrPos(intArr,0,4);
            System.out.println("==================用泛型方法交换数组里两元素的位置===========================");
            changeArrPos(strArr,0,2);
            changeArrPos(intArr,0,4);
            System.out.println("===================用泛型方法交换数组里两元素的位置==========================\n");
    

    输出结果:


    image.png

    用泛型方法做的list遍历

        /**
         * 用泛型方法做的list遍历
         * @param lists 要遍历的列表
         * @param <T> 传入的类型
         */
        public <T> void printList(List<T> lists){
            for (T list : lists) {
                System.out.println(list);
            }
        }
    
          System.out.println("===================用泛型方法做的list遍历==========================\n");
    
            List<String> stringList = new ArrayList<>();
            stringList.add("我爸爸是");
            stringList.add("java工程师");
            stringList.add("我妈妈是");
            stringList.add("病毒科学家");
            GenericTest gt = new GenericTest();
            gt.printList(stringList);
            List<Integer> intList = new ArrayList<>();
            intList.add(5);
            intList.add(7);
            intList.add(0);
            intList.add(3);
            gt.printList(intList);
            System.out.println("===================用泛型方法做的list遍历==========================\n");
    

    输出结果:


    image.png

    注意:

    在泛型的lists遍历方法中,不能使用add方法,除非是add(null),因为集合的add方法是list.add(T t),要求类型为T,但是T是一个泛型,真正的类型在使用的时候确定,那么此时不能确定T的类型,所以不能使用add方法,但能add(null),但这个没意义。
    可以使用get方法,因为get方法获取的就是一个T类型,建议get方法用T去接。

    image.png

    相关文章

      网友评论

          本文标题:JAVA泛型的使用(1)

          本文链接:https://www.haomeiwen.com/subject/xjfbcrtx.html