发布时间:2026/7/18 23:55:14
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/7/18 23:55:14

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

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

2026/7/18 23:50:13

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

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

2026/7/18 23:50:13

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

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

2026/7/19 1:55:53

C#通过AT指令控制语音猫实现串口通信

1. 项目概述:C#通过AT指令操控语音猫的核心逻辑语音猫(Voice Modem)作为一种嵌入式通信设备,在电话自动应答、语音播报等场景中广泛应用。通过AT指令集控制这类设备,本质上是通过串口发送特定格式的文本命令。C#的Seri…

2026/7/19 1:55:53

AM/FM信号解调系统设计与FPGA实现

1. 项目背景与核心需求 2022年全国大学生电子设计竞赛省赛F题要求参赛队伍设计实现AM/FM信号的解调系统。这个题目考察的是模拟通信系统中两种基础调制解调技术的工程实现能力。在实际无线电通信中,AM(幅度调制)和FM(频率调制&…

2026/7/19 1:55:53

观鸟主题英语阅读训练:自然与语言学习的完美结合

1. 项目概述:观鸟主题英语阅读训练这个阅读训练项目以观鸟为主题,将英语学习与自然观察相结合。作为一名英语教育从业者,我发现将语言学习融入真实生活场景能显著提升学习效果。观鸟活动本身就包含观察记录、物种识别等需要语言描述的环节&am…

2026/7/19 1:55:53

游戏角色设计:从swordswoman到战斗系统的全面解析

1. 项目概述:从标题"swordswoman"展开的创意解析"swordswoman"这个看似简单的英文单词,实际上蕴含着丰富的创作可能性。作为从业十余年的内容创作者,我见过太多围绕特定角色或职业展开的项目,但真正能挖掘出深…

2026/7/19 1:50:52

Unity坐标系详解:Global与Local的区别及移动方向控制

1. 项目概述:从一次“诡异”的Bug说起如果你在Unity里旋转过一个物体,然后试图让它沿着某个轴(比如Transform.forward)移动,结果却发现它朝着一个完全意想不到的方向飞了出去,那么恭喜你,你遇到…

2026/7/19 0:00:15

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:15

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/18 16:50:29

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…