家人们上一篇咱们唠了 List 接口今天必须把泛型、Collections 工具类和 Set 接口这几个 “集合坑” 给盘明白尤其是泛型和 Set 去重面试和开发里高频踩坑看完这篇你再也不用对着报错抓耳挠腮了四、泛型集合里的 “安全锁”防止你乱塞东西泛型说白了就是给集合加了一把安全锁强制集合里只能存指定类型的元素避免你把各种乱七八糟的对象塞进去取出来的时候还得强转容易出类型转换异常。1. 泛型集合安全又省心用泛型定义集合语法超简单java运行ListString list new ArrayListString(); // 现在这个List里只能存String类型的元素不能存别的类型好处编译时就会检查类型存错了直接报错不用等运行时才出问题取元素的时候也不用强转直接就是指定类型超省心。2. 泛型类自定义类也能加 “安全锁”除了集合自定义类也可以用泛型语法java运行class 类名泛型标识1, 泛型标识2{ // 把泛型标识当数据类型用就行 }常用的泛型标识K键、V值、E元素、T类型。注意创建对象时必须指定泛型类型前后要一致基本数据类型不能当泛型得用对应的包装类不指定的话默认是Object类型。五、Collections 工具类操作集合的 “外挂神器”Collections是操作集合元素的工具类里面全是静态方法相当于给集合开了 “外挂”比如排序、倒置、随机打乱超方便。面试题Collection和Collections的区别Collection是所有单列集合的父接口定义了 List、Set 等子接口。Collections是操作集合的工具类提供了大量静态方法操作集合元素。1. 常用方法开发必备reverse(List list)把集合里的元素倒置相当于 “把队伍倒过来排”。shuffle(List list)把集合里的元素随机打乱相当于 “随机点名”。sort(List list)对集合里的元素排序重点来了如果集合里存的是自定义类型的对象必须实现Comparable接口或者用Comparator比较器不然没法排序2. 两种比较器内置 外置自定义排序规则1内置比较器Comparable接口写在类里的排序规则自定义类实现Comparable接口重写compareTo方法定义排序规则比如按年龄排序、按成绩排序java运行public class Student implements ComparableStudent{ private String name; private Integer age; private Double score; // 重写compareTo方法定义排序规则 Override public int compareTo(Student o) { // 先按年龄升序排 if(this.age o.age){ return 1; }else if(this.age o.age){ return -1; }else{ // 年龄相同按成绩降序排 if(this.score o.score){ return -1; }else if(this.score o.score){ return 1; }else{ // 成绩相同按姓名升序排 return this.name.compareTo(o.name); } } } }2外置比较器Comparator接口写在类外面的排序规则不想改自定义类的话可以用Comparator接口在排序的时候指定规则比如用匿名内部类实现java运行Collections.sort(list, new ComparatorWorker(){ Override public int compare(Worker w1, Worker w2) { // 按年龄升序排 if(w1.getAge() w2.getAge()){ return 1; }else if(w1.getAge() w2.getAge()){ return -1; }else{ return 0; } } });六、Set 接口无序不重复的 “去重神器”Set接口也是Collection的子接口堪称 Java 里的去重神器特点和 List 正好相反无序元素没有顺序没有下标不是按添加顺序排列的。不重复元素内容不允许重复就像排队不允许有人重复占位。1. Set 的三大实现类开发 面试重点1HashSet开发里最常用的 Set 实现类HashSet底层是哈希表实现的是开发里最常用的 Set 实现类核心特点无序、不重复查询效率高。重点自定义类型的对象存到HashSet里怎么保证不重复必须重写hashCode()方法保证内容相同的对象返回相同的哈希码内容不同的尽量返回不同的哈希码。必须重写equals()方法保证内容相同的对象返回true这样HashSet才会认为是同一个对象拒绝添加。去重原理对象存到HashSet时先调用hashCode()拿哈希码找存储位置如果位置上没元素直接存如果位置上有元素再调用equals()比较内容内容相同就拒绝添加不同就存进去。2TreeSet自带排序的 Set 实现类TreeSet是SortedSet的实现类会对元素自动排序特点无序、不重复同时自带排序功能。重点自定义类型的对象存到TreeSet里必须实现Comparable接口重写compareTo()方法compareTo()返回 0 的话TreeSet会认为是相同内容的对象拒绝添加。3LinkedHashSet有序的 HashSetLinkedHashSet是HashSet的子类特点按添加顺序存储元素同时不允许重复相当于 “有序的 HashSet”。自定义类型的对象存进去同样需要重写hashCode()和equals()方法。2. Set 的遍历方式Set 没有下标不能用下标遍历常用的遍历方式是forEach增强 for 循环底层也是迭代器遍历java运行for(Object obj : set){ // 直接操作obj就行 }今天先唠到这泛型、Collections 工具类和 Set 接口的套路你 get 到了吗下一篇咱们继续唠 Map 接口这个 Java 里的 “键值对收纳盒”开发里用得比 List 还多看完你就再也不会被HashMap搞疯了
【Java 入门 Day20】 集合篇(中):泛型 Collections 工具类 Set 接口,集合里的 “安全锁” 和 “去重神器”!
发布时间:2026/6/14 15:40:58
家人们上一篇咱们唠了 List 接口今天必须把泛型、Collections 工具类和 Set 接口这几个 “集合坑” 给盘明白尤其是泛型和 Set 去重面试和开发里高频踩坑看完这篇你再也不用对着报错抓耳挠腮了四、泛型集合里的 “安全锁”防止你乱塞东西泛型说白了就是给集合加了一把安全锁强制集合里只能存指定类型的元素避免你把各种乱七八糟的对象塞进去取出来的时候还得强转容易出类型转换异常。1. 泛型集合安全又省心用泛型定义集合语法超简单java运行ListString list new ArrayListString(); // 现在这个List里只能存String类型的元素不能存别的类型好处编译时就会检查类型存错了直接报错不用等运行时才出问题取元素的时候也不用强转直接就是指定类型超省心。2. 泛型类自定义类也能加 “安全锁”除了集合自定义类也可以用泛型语法java运行class 类名泛型标识1, 泛型标识2{ // 把泛型标识当数据类型用就行 }常用的泛型标识K键、V值、E元素、T类型。注意创建对象时必须指定泛型类型前后要一致基本数据类型不能当泛型得用对应的包装类不指定的话默认是Object类型。五、Collections 工具类操作集合的 “外挂神器”Collections是操作集合元素的工具类里面全是静态方法相当于给集合开了 “外挂”比如排序、倒置、随机打乱超方便。面试题Collection和Collections的区别Collection是所有单列集合的父接口定义了 List、Set 等子接口。Collections是操作集合的工具类提供了大量静态方法操作集合元素。1. 常用方法开发必备reverse(List list)把集合里的元素倒置相当于 “把队伍倒过来排”。shuffle(List list)把集合里的元素随机打乱相当于 “随机点名”。sort(List list)对集合里的元素排序重点来了如果集合里存的是自定义类型的对象必须实现Comparable接口或者用Comparator比较器不然没法排序2. 两种比较器内置 外置自定义排序规则1内置比较器Comparable接口写在类里的排序规则自定义类实现Comparable接口重写compareTo方法定义排序规则比如按年龄排序、按成绩排序java运行public class Student implements ComparableStudent{ private String name; private Integer age; private Double score; // 重写compareTo方法定义排序规则 Override public int compareTo(Student o) { // 先按年龄升序排 if(this.age o.age){ return 1; }else if(this.age o.age){ return -1; }else{ // 年龄相同按成绩降序排 if(this.score o.score){ return -1; }else if(this.score o.score){ return 1; }else{ // 成绩相同按姓名升序排 return this.name.compareTo(o.name); } } } }2外置比较器Comparator接口写在类外面的排序规则不想改自定义类的话可以用Comparator接口在排序的时候指定规则比如用匿名内部类实现java运行Collections.sort(list, new ComparatorWorker(){ Override public int compare(Worker w1, Worker w2) { // 按年龄升序排 if(w1.getAge() w2.getAge()){ return 1; }else if(w1.getAge() w2.getAge()){ return -1; }else{ return 0; } } });六、Set 接口无序不重复的 “去重神器”Set接口也是Collection的子接口堪称 Java 里的去重神器特点和 List 正好相反无序元素没有顺序没有下标不是按添加顺序排列的。不重复元素内容不允许重复就像排队不允许有人重复占位。1. Set 的三大实现类开发 面试重点1HashSet开发里最常用的 Set 实现类HashSet底层是哈希表实现的是开发里最常用的 Set 实现类核心特点无序、不重复查询效率高。重点自定义类型的对象存到HashSet里怎么保证不重复必须重写hashCode()方法保证内容相同的对象返回相同的哈希码内容不同的尽量返回不同的哈希码。必须重写equals()方法保证内容相同的对象返回true这样HashSet才会认为是同一个对象拒绝添加。去重原理对象存到HashSet时先调用hashCode()拿哈希码找存储位置如果位置上没元素直接存如果位置上有元素再调用equals()比较内容内容相同就拒绝添加不同就存进去。2TreeSet自带排序的 Set 实现类TreeSet是SortedSet的实现类会对元素自动排序特点无序、不重复同时自带排序功能。重点自定义类型的对象存到TreeSet里必须实现Comparable接口重写compareTo()方法compareTo()返回 0 的话TreeSet会认为是相同内容的对象拒绝添加。3LinkedHashSet有序的 HashSetLinkedHashSet是HashSet的子类特点按添加顺序存储元素同时不允许重复相当于 “有序的 HashSet”。自定义类型的对象存进去同样需要重写hashCode()和equals()方法。2. Set 的遍历方式Set 没有下标不能用下标遍历常用的遍历方式是forEach增强 for 循环底层也是迭代器遍历java运行for(Object obj : set){ // 直接操作obj就行 }今天先唠到这泛型、Collections 工具类和 Set 接口的套路你 get 到了吗下一篇咱们继续唠 Map 接口这个 Java 里的 “键值对收纳盒”开发里用得比 List 还多看完你就再也不会被HashMap搞疯了