• Javase之集合泛型


    集合泛型知识

    泛型

    是一种把类型明确工作推迟到创建对象或者调用方法的时候才明确的特殊类型。

    也称参数化类型,把类型当成参数传递。

    在jdk1.5中出现。一般来说经常在集合中使用。

    • 格式

      <数据类型>

      此处的数据类型只能是引用类型

    • 好处

      1.把运行期间的问题提前到编译时期。

      2.避免了强制类型转换。

      3.优化了程序,解决了警告。

    • 泛型产生原因

      早期,Java中使用Object来表示所有类型。向上转型没有问题,但是在向下转型的时候隐含了类型转换问题。

      也即是说,这样的程序是不安全的。所以在Java的JDK5以后引入了泛型,提高了程序安全性。

    • 泛型的应用

      • 泛型类

        把泛型定义在类中

        格式:public class 类名<泛型类型1,…>(表明可定义多个泛型类型,每个类型之间用逗号隔开。)

        public  class objectTool<T>{
            private T obj;
            
            public T getObj(){
                return obj;
            }
            
            public void setObj(){
                this.obj = obj;
            }
        }
        
      • 泛型方法

        把泛型定义在方法上

        格式:public <泛型类型> 返回类型 方法名(泛型类型);

        public <T> void show(T t){
                System.out.println(t);
            }
        
      • 泛型接口

        把泛型定义在接口上

        格式:public interface 接口名<泛型类型1,…>

        interface Inter<T>{
            public abstract void show(T t);
        }
        
        //实现接口
        //1.知道要用什么类型
        //class InterImpl implements Inter<String>{
        //
        //    @Override
        //    public void show(String t) {
        //        System.out.println(t);
        //    }
        //}
        
        //2.不知道要用什么类型
        class InterImpl<T> implements Inter<T>{
        
            @Override
            public void show(T t) {
                System.out.println(t);
            }
        }
        
    • 泛型高级之通配符

      泛型如果明确的写出,则前后必须一致

      class Animal {
      
      }
      
      class Dog extends Animal{
      
      }
      
      class Cat extends Animal{
          
      }
      

      • 表示任意类型,如果没有明确那么就是Object及Java任意类

        Collection<?> c1 = new ArrayList<Object>();
        Collection<?> c2 = new ArrayList<Animal>();
        Collection<?> c3 = new ArrayList<Dog>();
        Collection<?> c4 = new ArrayList<Cat>();
        

      • ?extends E

        向下限定,E及其子类

        Collection<? extends Animal> a1 = new ArrayList<Animal>();
        Collection<? extends Animal> a2 = new ArrayList<Dog>();
        Collection<? extends Animal> a3 = new ArrayList<Cat>();
        

      • ?super E

        向上限定,E及其父类

        Collection<? super Animal> b1 = new ArrayList<Animal>();
        Collection<? super Animal> b2 = new ArrayList<Object>();
        

  • 相关阅读:
    POJ 2456 Aggressive cows
    POJ 1064 Cable master
    POJ 3723 Conscription
    左偏树
    tarjan模板
    [bzoj5017][Snoi2017]炸弹 tarjan缩点+线段树优化建图+拓扑
    [BZOJ4520][Cqoi2016]K远点对 kd-tree 优先队列
    [bzoj3218]a + b Problem 网络流+主席树优化建图
    #6034. 「雅礼集训 2017 Day2」线段游戏 李超树
    【UOJ UNR #1】火车管理 可持久化线段树
  • 原文地址:https://www.cnblogs.com/wf614/p/11673850.html
Copyright © 2020-2023  润新知