day22
泛型的介绍
泛型的好处:
将运行时的类型检查通过编译器提前到了编译期,避免了强制类型转换,提高代码的安全性
泛型的擦除补偿(机制)
擦除:
补偿:
泛型的使用
说明:
泛型只能在类,方法,接口上使用
定义泛型类:
格式:
public class 类名<E>{}
说明:
一般是在创建类的对象时,确定泛型的类型
一旦确定了E是String,那么该泛型类中所有的E都是String
好处:
提高了类的灵活性
泛型方法:
格式:
public (static) <E> 返回值类型 方法名(形参){方法体}
说明:
当调用方法时,传入的参数是什么类型,方法的泛型就是什么类型
注意事项:
泛型方法必须带有泛型参数
好处:
提高了类方法的灵活性
泛型接口:
格式:
public interface 接口名<T>{}
说明:
当定义子类实现接口时在接口名的后面确定泛型
当定义子类也是泛型类,那么就在创建子类对象时确定泛型
好处:
提高了接口方法的灵活性
泛型通配符:
明确:
泛型通配符都是在方法的形式参数列表上使用
分类: <?>
代表所有类型
<? extends E> 代表泛型是E或者E的子类型 上限通配符
<? super E>代表泛型是E或者E的父类型 下限通配符
明确: 泛型的通配符一般采用: E , T 表示 任意一种引用数据类型
栈:
栈的特点:
栈顶是开口的,栈底是闭合的
只能在栈顶进行插入和删除元素操作 ---> 是First in Last out 的线性表
具有top指针, 每次在top处操作元素
常用方法:
void push(E e);入栈,在顶部添加元素,栈的空间可能是有限的,如果栈满了,会抛出异常。
E pop();出栈,返回顶部元素,并且从栈中删除,如果栈为空,会抛出异常。
E peek();查看栈头部元素,不修改栈,如果栈为空,返回null。
boolean isEmpty();判断栈是否为空,如果为空则返回true;否则返回false。
队列
明确:
在Java中 接口Queue代表队列,实现了Queue接口的子类都具有队列的特点
Queue代表队列是无界队列
迭代器遍历ArrayList
明确:
Collection中提供了一个方法: Iterator<E> iterator();所以Collection的子类都可以使用迭代器迭代遍历:
Iterator : 迭代器
常用方法:
boolean hasNext();
E next();
default void remove()
注意事项:
在迭代过程中不能使用集合对象对集合中元素进行修改操作: