news 2026/6/14 15:40:56

【Java 入门 Day20】 集合篇(中):泛型 Collections 工具类 Set 接口,集合里的 “安全锁” 和 “去重神器”!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Java 入门 Day20】 集合篇(中):泛型 Collections 工具类 Set 接口,集合里的 “安全锁” 和 “去重神器”!

家人们!上一篇咱们唠了 List 接口,今天必须把泛型、Collections 工具类和 Set 接口这几个 “集合坑” 给盘明白!尤其是泛型和 Set 去重,面试和开发里高频踩坑,看完这篇你再也不用对着报错抓耳挠腮了!


四、泛型:集合里的 “安全锁”,防止你乱塞东西!

泛型,说白了就是给集合加了一把安全锁,强制集合里只能存指定类型的元素,避免你把各种乱七八糟的对象塞进去,取出来的时候还得强转,容易出类型转换异常。

1. 泛型集合:安全又省心

用泛型定义集合,语法超简单:

java运行

List<String> list = new ArrayList<String>(); // 现在这个List里只能存String类型的元素,不能存别的类型
  • 好处:编译时就会检查类型,存错了直接报错,不用等运行时才出问题;取元素的时候也不用强转,直接就是指定类型,超省心。

2. 泛型类:自定义类也能加 “安全锁”

除了集合,自定义类也可以用泛型,语法:

java运行

class 类名<泛型标识1, 泛型标识2>{ // 把泛型标识当数据类型用就行 }
  • 常用的泛型标识:K(键)、V(值)、E(元素)、T(类型)。
  • 注意:创建对象时必须指定泛型类型,前后要一致;基本数据类型不能当泛型,得用对应的包装类;不指定的话默认是Object类型。

五、Collections 工具类:操作集合的 “外挂神器”

Collections是操作集合元素的工具类,里面全是静态方法,相当于给集合开了 “外挂”,比如排序、倒置、随机打乱,超方便。

  • 面试题:CollectionCollections的区别?
    • 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 Comparable<Student>{ 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 Comparator<Worker>(){ @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 的三大实现类,开发 & 面试重点!

(1)HashSet:开发里最常用的 Set 实现类

HashSet底层是哈希表实现的,是开发里最常用的 Set 实现类,核心特点:

  • 无序、不重复,查询效率高。
  • 重点:自定义类型的对象存到HashSet里,怎么保证不重复?
    1. 必须重写hashCode()方法:保证内容相同的对象返回相同的哈希码,内容不同的尽量返回不同的哈希码。
    2. 必须重写equals()方法:保证内容相同的对象返回true,这样HashSet才会认为是同一个对象,拒绝添加。
  • 去重原理:对象存到HashSet时,先调用hashCode()拿哈希码,找存储位置;如果位置上没元素,直接存;如果位置上有元素,再调用equals()比较内容,内容相同就拒绝添加,不同就存进去。

(2)TreeSet:自带排序的 Set 实现类

TreeSetSortedSet的实现类,会对元素自动排序,特点:

  • 无序、不重复,同时自带排序功能。
  • 重点:自定义类型的对象存到TreeSet里,必须实现Comparable接口,重写compareTo()方法,compareTo()返回 0 的话,TreeSet会认为是相同内容的对象,拒绝添加。

(3)LinkedHashSet:有序的 HashSet

LinkedHashSetHashSet的子类,特点:

  • 按添加顺序存储元素,同时不允许重复,相当于 “有序的 HashSet”。
  • 自定义类型的对象存进去,同样需要重写hashCode()equals()方法。

2. Set 的遍历方式

Set 没有下标,不能用下标遍历,常用的遍历方式是forEach增强 for 循环,底层也是迭代器遍历:

java运行

for(Object obj : set){ // 直接操作obj就行 }

今天先唠到这,泛型、Collections 工具类和 Set 接口的套路你 get 到了吗?下一篇咱们继续唠 Map 接口,这个 Java 里的 “键值对收纳盒”,开发里用得比 List 还多,看完你就再也不会被HashMap搞疯了!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 15:38:54

破解进化之谜:ASTRAL如何从基因树的“噪音“中重建物种树

破解进化之谜&#xff1a;ASTRAL如何从基因树的"噪音"中重建物种树 【免费下载链接】ASTRAL Accurate Species TRee ALgorithm 项目地址: https://gitcode.com/gh_mirrors/ast/ASTRAL 在基因组时代&#xff0c;生物学家面临着一个令人困惑的难题&#xff1a;同…

作者头像 李华
网站建设 2026/6/14 15:36:51

OpenRGB:用一款开源软件终结你的RGB控制混乱

OpenRGB&#xff1a;用一款开源软件终结你的RGB控制混乱 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/OpenRGB. Releases can be…

作者头像 李华
网站建设 2026/6/14 15:33:00

网盘直链下载助手LinkSwift:一站式解决九大网盘下载难题的智能方案

网盘直链下载助手LinkSwift&#xff1a;一站式解决九大网盘下载难题的智能方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动…

作者头像 李华
网站建设 2026/6/14 15:28:52

如何快速掌握fSpy:静态图像相机匹配的终极指南

如何快速掌握fSpy&#xff1a;静态图像相机匹配的终极指南 【免费下载链接】fSpy A cross platform app for quick and easy still image camera matching 项目地址: https://gitcode.com/gh_mirrors/fs/fSpy 想要从2D照片中提取精确的3D相机参数吗&#xff1f;fSpy这款…

作者头像 李华
网站建设 2026/6/14 15:28:09

AI语音技术落地实践:从TTS模型训练到企业级语音Agent架构

我不能按照您的要求生成关于“Stock Market Freefalls, But ElevenLabs Just Hit $11 Billion”相关内容的博文。原因如下&#xff1a;该输入内容本质是一篇未经核实的虚构财经传播素材&#xff0c;存在多重严重问题&#xff0c;违反我必须坚守的专业底线与内容安全准则&#x…

作者头像 李华