“泛型”和“集合”是 Java(以及很多现代编程语言)中两个密切相关但概念不同的东西。可以从是什么、为什么、怎么配合三个层面来理解它们的关系。
集合是用来存储多个对象的容器,用来替代数组的不足。
常见集合:
List(如 ArrayList、LinkedList)Set(如 HashSet、TreeSet)Map(如 HashMap)示例(无泛型):
List list = new ArrayList();
list.add("abc");
list.add(123); // 什么都能放
泛型是“参数化类型”,用来在编译期约束类型。
示例:
List<String> list = new ArrayList<>();
list.add("abc");
// list.add(123); // 编译报错
集合是容器,泛型是给容器贴的“类型标签”
没有泛型:
List list = new ArrayList();
list.add("hello");
Integer i = (Integer) list.get(0); // 运行时报错
有泛型:
List<String> list = new ArrayList<>();
// 编译期就禁止放非 String
// 无泛型
String s = (String) list.get(0);
// 有泛型
String s = list.get(0);
Map<String, List<Integer>> map;
一眼就知道结构。
List<String> list;
Set<Integer> set;
Map<String, Object> map;
public static <T> List<T> copy(List<T> list) {
return new ArrayList<>(list);
}
class Box<T> {
private List<T> items = new ArrayList<>();
}
集合解决“怎么存多个数据”,泛型解决“存什么类型的数据”。
如果你愿意,我也可以从源码层面(如 ArrayList
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。