Java集合框架:HashMap与Set的实现与使用

发布时间:2026/9/15 5:42:55

Java集合框架:HashMap与Set的实现与使用 1. HashMap自定义实现下面是一个简化版的HashMap实现使用数组链表的方式处理哈希冲突package map; public class MyHashMap { static class Node { public int key; public int value; public Node next; public Node(int key, int value) { this.key key; this.value value; } } private Node[] table new Node[1001]; private int size; private int hashCode(int key) { return key % table.length; } public void put(int key, int value) { int index hashCode(key); // 遍历链表看key是否在链表中存在 // 如果存在就修改对应的value Node head table[index]; for (Node cur head; cur ! null; cur cur.next) { if (cur.key key) { cur.value value; return; } } // 不存在就直接头插 Node newNode new Node(key, value); newNode.next head; table[index] newNode; size; // 扩容 if ((double)size / table.length 0.75) { resize(); } } // 扩容操作 private void resize() { Node[] newTable new Node[table.length * 2]; for (int i 0; i table.length; i) { for (Node cur table[i]; cur ! null; cur cur.next) { Node newNode new Node(cur.key, cur.value); int newIndex cur.key % newTable.length; newNode.next newTable[newIndex]; newTable[newIndex] newNode; } } table newTable; } // 根据键获取值 public Integer get(int key) { int index hashCode(key); for (Node cur table[index]; cur ! null; cur cur.next) { if (cur.key key) { return cur.value; } } return null; } // 删除键值对 public void remove(int key) { int index hashCode(key); if (table[index] null) { return; } if (table[index].key key) { table[index] table[index].next; size--; return; } Node prev table[index]; Node cur table[index].next; while (cur ! null) { if (cur.key key) { prev.next cur.next; size--; } prev cur; cur cur.next; } } }2. Set集合的使用示例下面是TreeSet和HashSet的基本操作示例package set; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; public class Test { public static void main(String[] args) { SetString set new TreeSet(); SetString set2 new HashSet(); set.add(aaa); set.add(bbb); set.add(ccc); set.add(ddd); set.add(eee); // 删除元素 set.remove(bbb); System.out.println(set); // 获取元素个数 System.out.println(set.size()); // 判定是否为空 System.out.println(set.isEmpty()); // 清空整个集合 set.clear(); System.out.println(set); // 遍历方式1增强for循环 for (String s : set) { System.out.println(s); } // 遍历方式2迭代器 IteratorString it set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }3. 核心实现解析3.1 HashMap实现要点哈希函数使用取模运算计算索引位置冲突解决采用链地址法每个桶使用链表存储扩容机制当负载因子超过0.75时进行扩容头插法新节点插入链表头部时间复杂度O(1)3.2 Set集合特点TreeSet基于红黑树实现元素有序HashSet基于HashMap实现元素无序共同特性不允许重复元素支持快速查找4. 使用建议在实际开发中建议优先使用Java标准库的HashMap和HashSet理解底层实现有助于优化性能根据需求选择合适的集合类型注意线程安全问题多线程环境下使用ConcurrentHashMap
延伸阅读

更多相关文章

2026/9/13 20:32:36

2026年泡菜废水治理企业推荐,这几家技术方案真靠谱

泡菜行业废水治理一直是环保圈内的“硬骨头”。高盐、高有机物、高氮磷的综合特性让传统生化处理频频失效。根据《环境工程学报》2024年的一项研究,当盐浓度超过0.2%时,普通活性污泥法的COD去除率会下降40%以上,这让很多泡菜企业年年治污&…

2026/9/13 2:58:00

成绩单公证流程,证天下小程序帮你省一半时间!

这篇文章会从实际操作角度,把成绩单公证的全流程讲清楚,包括适用场景、所需材料、费用周期,还会对比线下办理、证天下线上办理和其他三方小程序的不同体验,帮你避开常见的办理坑点,同时附上证天下公证小程序的详细操作…

2026/9/15 4:02:53

在 Visual Studio 中完全掌控您的悬浮窗口

的是,有一项鲜为人知的设置,能够让您精准控制 Visual Studio 对浮动窗口的控制程度。设置路径如下:Tools > Options > Environment > Windows > Floating Windows。您将会看到此对话框:该下拉菜单标注有“These float…

2026/9/15 5:41:35

WorkBuddy零基础实战:7个可落地AI工作流搭建指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 5:41:35

SpringBoot记账本源码实战:从项目骨架到SQL性能优化

简介:这是一份基于SpringBoot实现的记账本系统完整源码包,面向Java方向毕业设计、课程实训以及SSM技术栈学习者。项目围绕日常收支管理场景,内置账单增删改查、分类管理、用户登录与数据表格展示等模块,Controller、实体类、业务辅…

2026/9/15 5:41:35

CPO技术:AI算力时代的光互连革命

1. 为什么我们需要重新思考算力互连架构?当我在数据中心现场第一次看到那些密密麻麻的光纤布线时,整个人都愣住了。机架间缠绕的光纤像蜘蛛网一样复杂,而工程师们告诉我,这还只是传统可插拔光模块方案下的常规场景。随着AI算力需求…

2026/9/15 5:41:35

光储并网系统Simulink仿真与MPPT控制实践

1. 光储并网系统与Simulink仿真概述在新能源发电领域,光伏直流微电网系统正成为分布式能源的重要解决方案。这类系统通常由光伏阵列、MPPT控制器、储能单元和并网逆变器构成核心架构。Simulink作为MATLAB中的动态系统仿真平台,因其模块化建模方式和丰富的…

2026/9/15 5:41:35

基于PLC与组态王的四层电梯控制系统优化设计

1. 项目背景与需求分析四层电梯控制系统是工业自动化领域中一个经典的控制案例,也是PLC编程初学者的"毕业设计"。这个项目基于组态王6.53(Kingview)与三菱FX系列PLC搭建,主要解决传统电梯控制系统中外呼信号响应不及时、…

2026/9/15 5:36:35

密码学课程设计实战:从BigInt到RSA与ElGamal的C++实现

简介:一份面向密码学课程设计的C/C源码与工程文件集合,围绕五个典型编程题目展开,涵盖凯撒与替换密码、对称加密、非对称加密、哈希函数与消息认证、数字签名等核心知识点,适合高校学生完成课程实验、撰写设计报告或复习备考。压缩…

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码