• 泛型简介


    泛型简介

                  为什么使用泛型?

                         一般使用在集合上

                                比如说把一个字符串类型值放入集合里面,这个时候,这个值放入集合·之后会失去本身的类型,只能是object类型 这个时候,比如想要对这个值进行类型转换,很容易出现类型转换错误,怎么解决这个错误,可以使用泛型来解决。

    在集合上如何使用泛型

           List  set  map

           泛型语法  集合<String> 比如  List<String>

         在list上面使用泛型:

    ArrayList  linkedList  Vector这三个区别  

    //遍历list有三种
    
            //普通for循环    迭代器      增强for
    
           
    
            //普通for循环
    
            for(int i = 0;i<list.size();i++){
    
                String s = list.get(i);
    
                System.out.println(s);
    
            }
    
            System.out.println("======");
    
            //使用增强for循环
    
            for (String s1 : list) {
    
                System.out.println(s1);
    
            }
    
            System.out.println("======");
    
            //使用迭代器
    
            Iterator<String> it = list.iterator();
    
            while(it.hasNext()){
    
                System.out.println(it.next());
    
            }
    
    //泛型使用set集合上
        @Test
    
        public void testSet(){
    
            Set<String> set = new HashSet<String>();
    
            set.add("www");
    
            set.add("qqq");
    
            set.add("zzz");
    
            //遍历set
    
            //两种     迭代器     增强for
    
            //增强for   输出是无序的
    
            for (String s2: set) {
    
                System.out.println(s2);
    
            }
    
            //使用迭代器
    
            Iterator<String> it1 = set.iterator();
    
            while(it1.hasNext()){
    
                System.out.println(it1.next());
    
            }
    
        }
    
     
    
     
    
    //在map上使用泛型   map结构  : key-valu形式
        @Test
    
        public void testMap(){
    
            Map<String,String> map = new HashMap<String,String>();
    
            map.put("aaa","111");
    
            map.put("bbb","222");
    
            map.put("ccc","333");
    
            //遍历map   两种  
    
            //1获取所有的key   通过key 得到value  使用get方法
    
            //2获取key和value的关系
    
            //使用第一种
    
            //获取所有的key
    
            Set<String> sets = map.keySet();
    
            //遍历所有的key返回set
    
            for (String key : sets) {
    
                //通过key得到value
    
                String value = map.get(key);
    
                System.out.println(key + ":" + value);
    
            }
    
            System.out.println("====");
    
            //第二种  得到key  和value关系
    
            Set<Entry<String,String>> sets1 = map.entrySet();
    
            //遍历sets1   增强for
    
            for (Entry<String, String> entry : sets1) {
    
                //entry是key 和value关系
    
                String keyv = entry.getKey();
    
                String valuev = entry.getValue();
    
                System.out.println(keyv + ":" + valuev);
    
            }
    
        }

    写基本数据类型类型对应包装类

            byte    Byte

            short  Short

            int     Integer

            long   Long

            float   Float

            double  Double

            char    Character

            boolean     Boolean

    6泛型使用在方法上  用的很多

      定义一个数组   指定位置交换

    方法的逻辑相同,只是数据类型不同,这时候使用泛型方法

    public static <T> void swap1(T[] arr,int a,int b){
    
            T temp = arr[a];
    
            arr[a] = arr[b];
    
            arr[b] = temp;
    
        }

    7泛型在类上使用(了解)

           在类上定义·一个类型  这个类型可以在类中直接使用

    public class TestDemo04<T> {
    
        //在类里面直接使用T的类型
    
        T aa;
    
        public void test11(T bb){
    
           
    
        }
    
       
    
        //写静态方法  在类上面定义泛型,不能在静态方法里面使用  如要使用需要自己定义
    
        public static <A>void test12(A cc){
    
           
    
        }
    
    }

    枚举

           什么是枚举  ?  

                  **需要在一定范围内取值,这个值只能是这个范围内中任意一个

                  **现实场景  :交通信号灯  有三种颜色  每次只能亮三种颜色里面任意一个。

    //使用枚举实现   枚举的构造方法是私有的

    enum Color3{
    
        RED,GREEN,YELLOW;
    
    }

      

    (简写方式)

    class Color2{
    
        //构造方法私有化
    
        private Color2(){}
    
        public static final Color2 RED = new Color2();
    
        public static final Color2 GREEN = new Color2();
    
        public static final Color2 YELLOW = new Color2();
    
       
    
    }

    特殊的枚举操作

      在枚举里面有构造方法

      有抽象方法

    9枚举的api操作

           **name()  : 返回枚举的名称

           ** ordinal()  : 枚举的下标,下表从0开始    

           **valueOf(Class<T> enumType, String name)  ;得到枚举对象

    还有两个方法,都是这两个方法不在api里面编译的时候生成的两个方法

    valueof(String name)  转换枚举对象

    values()  获取所有枚举对象数组

     

    10静态导入(了解)

    int[] arr1 = {10,2,1,32,56};

    Arrays.sort(arr1);

    System.out.println(Arrays.toString(arr1));   排列

    11自动拆装箱   jdk5.0

           装箱

                  把基本数据类型转换成包装类

           拆箱

                  把包转换成基本数据类型

    //自动装箱

            Integer i = 10;

            //自动拆箱

            int m = i;

     

    jdk 会向下兼容的

    可变参数

    * 可变参数

     * 如果实现多个方法,这些方法里面的逻辑基本相同,唯一不同的是传递的参数个数,可以使用可变参数

    public static void add(int...nums){
    
            //nums理解为一个数组,这个数组可以存储传递来的参数
    
            //System.out.println(nums.length);
    
            //遍历数组
    
            int sum = 0;
    
            for(int i = 0;i<nums.length;i++){
    
                sum += nums[i];
    
            }
    
            System.out.println(sum);
    
           
    
        }

    只能做参数   ;  方法列只能有一个可变参数;  方法的参数列表中的可变参数,必须放在参数最后   add(int a;int…nums)

     

  • 相关阅读:
    【数学】三分法
    【数学】【背包】【NOIP2018】P5020 货币系统
    【数学】【CF27E】 Number With The Given Amount Of Divisors
    【单调队列】【P3957】 跳房子
    【极值问题】【CF33C】 Wonderful Randomized Sum
    【DP】【CF31E】 TV Game
    【神仙题】【CF28D】 Don't fear, DravDe is kind
    【线段树】【CF19D】 Points
    【字符串】KMP字符串匹配
    【二维树状数组】【CF10D】 LCIS
  • 原文地址:https://www.cnblogs.com/mzdljgz/p/10390172.html
Copyright © 2020-2023  润新知