泛型方法和接口
一,泛型
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