news 2026/6/26 17:49:23

Java中Set集合的概念

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java中Set集合的概念

java.util.Set 是 Java 集合框架的子接口,继承自 Collection 接口,核心特征是存储的元素无序且不可重复,不支持通过索引访问元素。

一、核心特性

1. 元素唯一性

Set 集合不允许存储重复元素,判断元素是否重复的依据是 equals() 方法和 hashCode() 方法——两个元素若 equals() 返回 true ,则 hashCode() 必须相等,反之不一定。当向 Set 中添加重复元素时, add() 方法会返回 false ,且集合不会发生变化。

2. 无序性

这里的无序指元素不会按插入顺序保存,也没有索引下标。遍历 Set 集合时,元素的输出顺序可能与插入顺序不同,具体表现由不同实现类决定。

3. 允许存储 null 元素

大部分 Set 实现类(如 HashSet )支持存储一个 null 元素, TreeSet 则不支持,向其存入 null 会抛出 NullPointerException 。

4. 线程不安全

常用的 HashSet 、 TreeSet 等实现类默认线程不安全,若多线程并发修改,需手动通过 Collections.synchronizedSet() 方法包装成线程安全的集合。

二、常用实现类

1. HashSet

基于 HashMap 实现,元素会作为 HashMap 的 key 存储。它的存取效率高,时间复杂度接近 O(1);元素无序;允许存储一个 null 元素;依赖 hashCode() 和 equals() 保证元素唯一性。

2. LinkedHashSet

基于 LinkedHashMap 实现,继承自 HashSet 。它兼具 HashSet 的元素唯一性,同时会维护元素的插入顺序,遍历顺序与插入顺序一致;存取效率略低于 HashSet。

3. TreeSet

基于红黑树实现。元素会自动按自然顺序(需实现 Comparable 接口)或指定比较器( Comparator )排序;不允许存储 null 元素;存取、查找的时间复杂度为 O(log n);元素唯一性通过比较器或 compareTo() 方法判断。

三、常用方法

Set 接口继承自 Collection 接口,常用方法如下:

1. 添加元素: boolean add(E e) —— 添加成功返回 true ,元素重复返回 false ; boolean addAll(Collection<? extends E> c) —— 添加另一个集合的所有元素。

2. 删除元素: boolean remove(Object o) —— 删除指定元素,成功返回 true ; void clear() —— 清空集合。

3. 判断元素: boolean contains(Object o) —— 判断集合是否包含指定元素; boolean isEmpty() —— 判断集合是否为空。

4. 获取长度: int size() —— 返回集合中元素的个数。

5. 遍历方式:支持增强 for 循环、迭代器(Iterator)遍历,不支持普通 for 循环(无索引)。

四、使用注意事项

1. 向 Set 中存储自定义对象时,必须重写 equals() 和 hashCode() 方法,否则无法保证元素唯一性,因为默认会使用 Object 类的方法,比较的是对象地址。

2. TreeSet 存储的元素要么实现 Comparable 接口,要么在创建 TreeSet 时传入 Comparator 比较器,否则会抛出 ClassCastException 。

3. HashSet 的元素顺序可能受元素 hashCode 影响,不要依赖其遍历顺序;若需有序,优先使用 LinkedHashSet 。

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

QuickLook远程预览:如何实现FTP/SFTP文件的无缝预览体验

QuickLook远程预览&#xff1a;如何实现FTP/SFTP文件的无缝预览体验 【免费下载链接】QuickLook 项目地址: https://gitcode.com/gh_mirrors/qui/QuickLook 作为Windows平台上备受推崇的快速文件预览工具&#xff0c;QuickLook的远程文件预览功能彻底改变了传统文件访问…

作者头像 李华
网站建设 2026/6/26 4:55:27

3步掌握实时语音识别:FunASR流式处理核心技术解析

3步掌握实时语音识别&#xff1a;FunASR流式处理核心技术解析 【免费下载链接】FunASR A Fundamental End-to-End Speech Recognition Toolkit and Open Source SOTA Pretrained Models, Supporting Speech Recognition, Voice Activity Detection, Text Post-processing etc. …

作者头像 李华
网站建设 2026/6/24 16:44:32

E-Hentai Viewer:iOS设备专业漫画阅读终极解决方案

还在为在iPhone或iPad上找不到好用的漫画阅读器而烦恼吗&#xff1f;E-Hentai Viewer为您带来革命性的移动漫画阅读体验&#xff01;这款专为iOS设备设计的专业阅读器&#xff0c;让您随时随地畅享海量漫画资源&#xff0c;彻底告别传统阅读方式的局限。 【免费下载链接】E-Hen…

作者头像 李华
网站建设 2026/6/22 13:31:49

快手下载终极指南:轻松保存无水印视频的完整方案

快手下载终极指南&#xff1a;轻松保存无水印视频的完整方案 【免费下载链接】KS-Downloader 快手无水印视频/图片下载工具 项目地址: https://gitcode.com/gh_mirrors/ks/KS-Downloader 想要保存快手视频却苦于找不到合适的方法&#xff1f;现在&#xff0c;通过专业的…

作者头像 李华
网站建设 2026/6/24 8:50:40

5分钟掌握TAP-Windows6驱动:从零构建到实战部署

你是否曾经在配置网络连接时遇到"网络适配器缺失"的困扰&#xff1f;或者在使用网络隧道工具时&#xff0c;发现驱动程序无法正常安装&#xff1f;这些问题的背后&#xff0c;很可能就是TAP-Windows6驱动在作祟。作为现代Windows系统中虚拟网络适配器的核心技术&…

作者头像 李华
网站建设 2026/6/25 22:30:25

基于EmotiVoice的情感语音合成系统在有声读物中的创新应用

基于EmotiVoice的情感语音合成系统在有声读物中的创新应用 如今&#xff0c;越来越多的人选择“听”书而非“读”书——通勤路上、睡前放松、家务间隙&#xff0c;有声读物正悄然改变着知识与故事的消费方式。然而&#xff0c;一个长期困扰行业的难题始终存在&#xff1a;如何让…

作者头像 李华