目录
开始复习基础啦......
数组:长度确定后不可修改、增删效率低、声明后只能存一种类型。
集合:长度可变、增删效率高、声明后可存多种类型(除非指定泛型)、只能存引用类型。
1. 泛型【相当于标签】
在编译时进行了检查,添加、接收时要使用泛型制定的类型,对元素进行了限制。
a. 声明类
在类名后添加<E>,如class G<E>{},实例化时可指定G<String>,如不声明,则E被当成Object对象-{ 泛型擦除}。
泛型类的泛型类型在创建对象时指定,类中的static方法、属性优先于对象存在,先创建static再有对象,所以静态属性和方法不能使用定义在类上的泛型。
b. 声明方法
并非带泛型的方法都为泛型方法,泛型方法的泛型类型与类的泛型类型无关,即非泛型类也可有泛型方法。
泛型方法的泛型类型在方法调用时指定,所以泛型方法可以为静态方法。
c. 继承
父类指定泛型,子类无需指定,相当于参数类型已确定。父类没指定泛型,还是以class <E>进行声明,子类必须为泛型类。
如存在对象ArrayList<String> A, ArrayList<Integer> B,ArrayList<Object> C,A、B、C间为并列关系,虽然Object和String间存在继承关系,但作为泛型参数他们无继承关系,不能采用A=B、A=C这种方式进行赋值。
d. 泛型约束
使用通配符“?”号表示匹配任意类型,使用“? extends A”表示匹配类型为A的子类。
* 上界由extends指定:表示该类型必须是指定类型或其子类;
* 下界由super指定:表示该类型必须是指定类型或其父类;
加入通配符后可对List执行遍历、读取(用根类Object接收),不可进行add操作(为了防止乱加,直接给ban掉了)。
2. Iterable接口
ListIterator:继承于Iterator接口,只能用于各种List类型的访问。为解决iterator和List同时对集合操作发生并发修改异常,引入新的迭代器,迭代和添加操作均由ListIterator进行,可以判断next和previous,可进行逆向遍历。
首先,ArrayList是实现类,其他全为接口。
3. collection接口【E元素存储】
定义了基本的增、删、查、判断方法。equals比较的是内容,"=="比较的是地址。