目录
泛型 Generics
泛型是 JDK1.5 以后增加的,它可以帮助我们建立类型安全的集合。在使用了泛型的集 合中,遍历时不必进行强制类型转换。JDK 提供了支持泛型的编译器,将运行时的类型检 查提前到了编译时执行,提高了代码可读性和安全性。
泛型的本质就是“数据类型的参数化”。 我们可以把“泛型”理解为数据类型的一个占位 符(形式参数),即告诉编译器,在调用泛型时必须传入实际类型。
自定义泛型
可以在类的声明处增加泛型列表,如<T,E,V>:。 此处,字符可以是任何标识符, 一般采用这 3 个字母。
泛型的声明:
class MyCollection<E> {// E:表示泛型;
Object[ ] objs = new Object[5];
public E get(int index) {// E:表示泛型;
return (E) objs[index];
}
public void set(E e, int index) {// E:表示泛型;
objs[index] = e;
}
}
泛型 E 像一个占位符一样表示“未知的某个数据类型”,我们在真正调用的时候传入这个 “数据类型”。
泛型的应用:
public class TestGenerics {
public static void main(String[ ] args) {
// 这里的”String”就是实际传入的数据类型;
MyCollection<String> mc = new MyCollection<String>();
mc.set("aaa", 0);
mc.set("bbb", 1);
String str = mc.get(1); //加了泛型,直接返回String类型,不用强制转换;
System.out.println(str);
}
}
容器中使用泛型
容器相关类都定义了泛型,我们在开发和工作中,在使用容器类时都要使用泛型。这样, 在容器的存储数据、读取数据时都避免了大量的类型判断,非常便捷。
泛型在集合中的使用:
import java.util.*;
public class TestGenerics {
public static void main(String[ ] args) {
// 以下代码中List、Set、Map、Iterator都是与容器相关的接口;
List<String> list = new ArrayList<String>();
Set<Map> Maps = new HashSet<Map>();
Map<Integer, Map> maps = new HashMap<Integer, Map>();
Iterator<Map> iterator = Maps.iterator();
}
}
通过阅读源码,我们发现 Collection、List、Set、Map、Iterator 接口都定义了泛型
所以,我们在使用这些接口及其实现类时,都要使用泛型。
只是强烈建议使用泛型。事实上,不使用编译器也不会报错
Collection 接口
Collection 表示一组对象,它是集中、收集的意思。Collection 接口的两个子接口是 List、 Set 接口。
方法 | 说明 |
boolean add(Object element) | 增加元素到容器中 |
boolean remove(Object element) | 从容器中移除元素 |
boolean contains(Object element) | 容器中是否包含该元素 |
int size() | 容器中元素的数量 |
boolean isEmpty() | 容器是否为空 |
void clear() | 清空容器中所有元素 |
Iterator iterator() | 获得迭代器,用于遍历所有元素 |
boolean containsAll(Collection c) | 本容器是否包含 c 容器中的所有元素 |
boolean addAll(Collection c) | 将容器 c 中所有元素增加到本容器 |
boolean removeAll(Collection c) | 移除本容器和容器 c 中都包含的元素 |
boolean retainAll(Collection c) | 取本容器和容器 c 中都包含的元素,移除非交集元素 |
Object[ ] toArray() | 转化成 Object 数组 |
标签:容器,Object,接口,boolean,Collection,泛型 From: https://blog.csdn.net/m0_48205251/article/details/136994098由于 List、Set 是 Collection 的子接口,意味着所有 List、Set 的实现类都有上面的方法。