一 怎么理解泛型
泛型机制将类型转换时的类型检查从运行时提前到了编译时,使用泛型编写的代码比杂乱的使用object并在需要时再强制类型转换的机制具有更好的可读性和安全性。
泛型的本质是参数化类型,也就是说在泛型使用过程中,操作的数据类型被指定为一个参数。类似于方法中的变量参数,此时类型也被定义为参数形式(可称为类型形参),然后在使用/调用时传入具体的类型(可称为类型实参)。
这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
泛型的好处有:
1 模版性,适用于多种数据类型执行相同的代码。在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型
2 可读性。从字面上就可以判断集合中的内容类型
3 编译时就进行类型检查,避免插入非法类型
4 使用数据时不再需要强制类型转换
类型参数名可以使用任意字符串,建议使用有代表意义的单个字符,以便于和普通类型名区分
通常T代表任意类型,S和D代表原数据和目的数据,E代表子元素类型,K和V代表键值对。
泛型对于集合类尤其有用,如ArrayList。这里可能有疑问,既然泛型为了适应不同的对象,ArrayList本来就可以操作不同类型的对象呀?那是因为没有泛型之前采用继承机制实现的,实际上它只维护了一个Object对象的数组。结果就是对List来说它只操作了一类对象Object,而在用户看来却可以保存不同的对象。
二 集合框架
Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue
List代表了有序可重复集合,可直接根据元素的索引来访问;
Set代表无序不可重复集合,只能根据元素本身来访问;
Queue是队列集合;
Map代表的是存储key-value对的集合,可根据元素的key来访问value。
三 list
3.1 list方法
更多可参考:https://www.matools.com/file/manual/jdk_api_1.8_google/java/util/List.html
类别 | Modifier and Type | Method and Description | |
增 | boolean | add(E e) | 将指定的元素追加到此列表的末尾 |
增 | void | add(int index, E element) | 将指定的元素插入此列表中的指定位置 |
增 | boolean | addAll(Collection<? extends E> c) | 按指定集合的迭代器返回的顺序将指定集合中的所有元素附加到此列表的末尾 |
增 | boolean | addAll(int index, Collection<? extends E> c) | 将指定集合中的所有元素插入到此列表中的指定位置(可选操作) |
删 | E | remove(int index) | 删除该列表中指定位置的元素(可选操作)。 |
删 | boolean | remove(Object o) | 从列表中删除指定元素的第一个出现(如果存在) |
删 | boolean | removeAll(Collection<?> c) | 从此列表中删除包含在指定集合中的所有元素 |
删 | void | clear() | 从此列表中删除所有元素 |
改 | E | set(int index, E element) | 用指定的元素替换此列表中指定位置的元素。 |
查 | E | get(int index) | 返回此列表中指定位置的元素。 |
查 | int |