泛型方法和接口

一,泛型

1,声明泛型: 返回值前使用<>
  2,泛型方法和static没有任何关系
   例:  public static <T> T getLastOne(ArrayList<T> arrayList){
      if(arrayList.size() == 0){
        returen null;
      }
      T t = arrayList.get(arrayList.size()-1);
        return t;
     }
     Integer i = getLastOne(new ArrayList<>());//java内部会推测使用的类型,用起来很灵活

二,接口

  1,定义接口:与定义类一样,不同的是把class关键字改为interface关键字

  2,接口中只能写常量和抽象方法

  3,定义常量时可以省略 public static final 关键字.

  4,定义抽象方法时可以省略 public abstract 关键字

  5,接口的实现:在类名后用implement关键字 和接口名

  6,抽象类中可以没有抽象方法,但是只有抽象类中能放抽象方法

三,接口和抽象类的区别

  1,语法角度:

     1.1,抽象类本质上还是一个类,在使用时,抽象类中可以存在普通方法和成员变量,而接口是单独的类型在使用时只能存在静态常量和抽象方法

1.2,接口中所有的方法可以不写abstract也是抽象方法而抽象类中的抽象方法,必须写abstract关键字

1.3,抽象类必须被继承,才能够使用,而接口必须被实现才能使用,一个类只能继承一个类,但是可以实现多个接口

  2,含义角度:

当我们使用抽象类的时候,通常表达一种"is a"的含义,即当前类和被继承之间存在着概念上的"父子关系";而使用接口的时候,通常想表达一种"like a"的含义,即只是确定当前类具有某种能力(具有某些方法),而没有概念上的"父子关系"

  3,使用角度:

    当一个类有确切的父子关系时,我们使用抽象类,否则使用接口(即不确定是否有确切的父子关系,我们会优先考虑接口,毕竟类只能继承一次);如果一个类中有实体方法,那么我们只能使用抽象类

四,ArrayList和LinkedList

  1,ArrayList底层是使用数组来实现的

  2,LinkedList底层是用链表来实现的

  3,实际开发中如果读取数据比较频繁,而插入,删除不频繁时使用ArrayList

  4,如果插入,删除比较频繁,使用LinkedList