当前位置: 首页 > news >正文

70-Java HashSet 类

🎁 福利时间

如果你正在备战面试或者想要学习其他知识,给大家推荐一个宝藏知识库,作者整理了一些列 Java 程序员需要掌握的核心知识,有需要的自取不谢。

知识库地址:https://farerboy.com/


Java HashSet 类

在本教程中,我们将学习Java HashSet类。我们将借助示例学习不同的哈希集方法和操作。

Java Collections框架的HashSet类提供了哈希表数据结构的功能。

它实现 Set 接口。

创建一个哈希集

为了创建哈希集,我们必须先导入java.util.HashSet包。

导入包后,就可以在Java中创建哈希集。

//具有8个容量和0.75负载因子的HashSet HashSet<Integer> numbers = new HashSet<>(8, 0.75);

在这里,我们创建了一个名为的哈希集numbers。

注意,新的部分HashSet<>(8, 0.75)。这里,第一参数是容量,并且第二参数是负载因子

  • capacity-该哈希集的容量为8。意味着,它可以存储8个元素。

  • loadFactor- 此哈希集的负载因子为0.6。这意味着,只要我们的哈希集填充了60%,元素就会移到新哈希表中,该哈希表的大小是原始哈希表的两倍。

默认容量和负载因子

创建散列表而不定义其容量和负载因子是可能的。例如,

//具有默认容量和负载因子的HashSet HashSet<Integer> numbers1 = new HashSet<>();

默认,

  • 哈希集的容量将为 16

  • 负载因子将为 0.75

HashSet的方法

HashSet类提供了各种方法,这些方法使我们可以对集合执行各种操作。

将元素插入HashSet

  • add() - 将指定的元素插入集合

  • addAll() - 将指定集合的所有元素插入集合

例如,

import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> evenNumber = new HashSet<>(); // 使用 add() 方法 evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet<Integer> numbers = new HashSet<>(); // 使用 addAll() 方法 numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); } }

输出结果

HashSet: [2, 4, 6] New HashSet: [2, 4, 5, 6]

访问HashSet元素

要访问哈希集合的元素,我们可以使用iterator()方法。为了使用此方法,我们必须导入java.util.Iterator包。例如,

import java.util.HashSet; import java.util.Iterator; class Main { public static void main(String[] args) { HashSet<Integer> numbers = new HashSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // 调用iterator()方法 Iterator<Integer> iterate = numbers.iterator(); System.out.print("使用Iterator的HashSet: "); //访问元素 while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }

输出结果

HashSet: [2, 5, 6] 使用Iterator的HashSet: 2, 5, 6,

删除元素

  • remove() - 从集合中删除指定的元素

  • removeAll() - 从集合中删除所有元素

例如,

import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> numbers = new HashSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); //使用remove()方法 boolean value1 = numbers.remove(5); System.out.println("值5被删除? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("所有的元素都被移除了吗? " + value2); } }

输出结果

HashSet: [2, 5, 6] 值5被删除? true 所有的元素都被移除了吗? true

Set操作方法

HashSet类的各种方法也可以用于执行各种set操作。

Set集合并集

执行两个集合之间的并集,我们可以使用addAll()方法。例如

import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> evenNumbers = new HashSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet<Integer> numbers = new HashSet<>(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); //集合并集 numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); } }

输出结果

HashSet1: [2, 4] HashSet2: [1, 3] Union is: [1, 2, 3, 4]

Set集合的交集

要执行两个集合之间的交集,我们可以使用retainAll()方法。例如

import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> primeNumbers = new HashSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers); HashSet<Integer> evenNumbers = new HashSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); //集合的交集 evenNumbers.retainAll(primeNumbers); System.out.println("交集: " + evenNumbers); } }

输出结果

HashSet1: [2, 3] HashSet2: [2, 4] 交集: [2]

Set集合的差集

要计算两组之间的差集,我们可以使用removeAll()方法。例如,

import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> primeNumbers = new HashSet<>(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers); HashSet<Integer> oddNumbers = new HashSet<>(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); //HashSet1和HashSet2之间的差集 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); } }

输出结果

HashSet1: [2, 3, 5] HashSet2: [1, 3, 5] 差集: [2]

Set集合的子集

要检查一个集合是否是另一个集合的子集,我们可以使用containsAll()方法。例如,

import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> numbers = new HashSet<>(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet<Integer> primeNumbers = new HashSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); //检查primeNumbers是否是numbers的子集 boolean result = numbers.containsAll(primeNumbers); System.out.println("HashSet2是HashSet1的子集吗? " + result); } }

输出结果

HashSet1: [1, 2, 3, 4] HashSet2: [2, 3] HashSet2是HashSet1的子集吗? true

HashSet的其他方法

方法描述
clone()创建HashSet副本
contains()在中搜索HashSet指定的元素,并返回布尔结果
isEmpty()检查是否HashSet为空
size()返回HashSet的大小
clear()从HashSet中删除所有元素

为什么选择HashSet?

在Java中,如果我们必须随机访问元素,则通常使用HashSet。 这是因为哈希表中的元素是使用哈希码访问的。

元素的hashcode是唯一标识,它有助于标识散列表中的元素。

HashSet不能包含重复的元素。因此,每个散列集元素都有一个惟一的hashcode。

注意:HashSet不同步。也就是说,如果多个线程同时访问哈希集合,并且其中一个线程修改了哈希集合。然后,它必须在外部同步。


http://www.jsqmd.com/news/895420/

相关文章:

  • 保姆级教程:用OpenIPC和WFB-NG在Jetson Orin Nano上搭建你的第一套FPV无人机AI视觉链路
  • AI辅助爬虫开发:Scrapy框架下的机遇与挑战
  • LaTeX列表排版进阶:用enumitem宏包5分钟搞定自定义缩进与符号
  • 【Linux】Ext 系列文件系统
  • 明事理妻子是丈夫最大的贵人的庖丁解牛
  • Tomato-Novel-Downloader:三步构建你的个人小说图书馆
  • Seraphine:英雄联盟玩家的10大智能助手功能,一键提升游戏体验
  • AI框架选型新指标:用行为承诺度量化项目健康度
  • 从工具使用者到架构指挥者:Claude Code高级配置与协作模式实战
  • XUnity.AutoTranslator终极指南:Unity游戏实时翻译与多语言支持解决方案
  • NBTExplorer:Minecraft数据编辑的终极图形化解决方案
  • 从单体Agent到弹性智能体集群,Kubernetes+LLMOps双栈协同实践全拆解,含可复用的CRD定义模板与Autoscaler调优参数
  • 最近写题记录和学习的总结
  • CentOS 7 安装 Docker 与 MySQL 、Redis完整指南
  • 简单学习 --> Rag
  • 2026年亲测免费去AI痕迹工具+3大方法,降低论文AI率30%! - 降AI实验室
  • BroadcastChannel 深度解析
  • Hugging Face分词报错怎么办?教你一招避坑
  • 告别命令行!ESP32-S3安全三件套(Flash加密+Secure Boot V2+NVS加密)的图形化工具配置避坑指南
  • 从1600次周下载看开源工具包设计:聚焦高频开发痛点
  • 2026年Python学习指南:从零基础到实战项目,掌握核心语法与工具
  • Windows窗口置顶终极指南:5分钟掌握AlwaysOnTop提升工作效率
  • RTX内核栈溢出检测机制与配置指南
  • 免费QQ音乐格式转换终极指南:如何用QMCDecode解锁加密音频文件
  • 番茄小说下载器:从网络小说到个人图书馆的一站式解决方案
  • RC振荡器和LC振荡器,是包含在单片机内部,还是作为单独的元件?
  • 基于ssm的大学校医院信息管理系统(10112)
  • 5步彻底解决TranslucentTB安装错误:Windows任务栏透明化工具安装指南
  • 新手避坑指南:在RHEL 6.10上安装Cadence IC618和Verdi 2018.09的完整流程(含依赖库检查)
  • EhViewer开源漫画阅读器:打造你的专属Android漫画图书馆