尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

可视化图解算法64:哈希表基础

可视化图解算法64:哈希表基础
📅 发布时间:2026/6/20 0:40:32

哈希表(Hash table),也被称为散列表,是一种基于哈希函数的数据结构,它通过把关键值(Key value)映射到表中一个位置来访问记录,从而加快查找的速度。

当我们想使用哈希法来解决问题的时候,我们一般会选择如下2种数据结构:

  1. map(映射)
  2. set(集合)

1. map(映射)

64-1

64-2

2. set(集合)

64-3

64-4

3. map使用示例

3.1 golang使用示例

package mainimport ("fmt""sync"
)func main() {// 创建并操作 mapuser := map[string]interface{}{"name":   "Bob","age":    25,"skills": []string{"Go", "Python"},}// 类型断言获取值if age, ok := user["age"].(int); ok {user["age"] = age + 1}// 删除字段delete(user, "skills")// 并发安全操作var wg sync.WaitGroupvar mu sync.Mutexcounter := make(map[int]int)for i := 0; i < 10; i++ {wg.Add(1)go func(i int) {defer wg.Done()mu.Lock()counter[i] = i * 2mu.Unlock()}(i)}wg.Wait()fmt.Println(user)    // 输出: map[age:26 name:Bob]fmt.Println(counter) // 输出类似: map[0:0 1:2 ... 9:18]
}

注意事项:

  1. Map 的键必须是可比较类型(不能是 slice、map、function)
  2. 每次遍历顺序随机(Go 故意设计的特性)
  3. 大数据量时优先预分配空间:make(map[string]int, 1000)
  4. 值可以是任意类型,包括另一个 map
  5. 查询不存在的键不会报错,返回零值

3.2 Java使用示例

import java.util.*;public class Main {public static void main(String[] args) {// 创建并操作 MapMap<String, Object> user = new HashMap<>();user.put("name", "Bob");user.put("age", 25);user.put("skills", new String[]{"Java", "Python"});// 类型安全访问if (user.get("age") instanceof Integer age) {user.put("age", age + 1);}// 删除元素user.remove("skills");// 并发安全示例Map<Integer, Integer> counter = new ConcurrentHashMap<>();List<Thread> threads = new ArrayList<>();for (int i = 0; i < 10; i++) {final int num = i;threads.add(new Thread(() -> {counter.put(num, num * 2);}));}threads.forEach(Thread::start);threads.forEach(t -> {try { t.join(); } catch (InterruptedException e) {}});System.out.println(user);    // 输出: {name=Bob, age=26}System.out.println(counter); // 输出: {0=0, 1=2, ..., 9=18}}
}

注意事项:

  1. 键的类型:必须正确实现 equals() 和 hashCode() 方法
  2. 空值处理:HashMap 允许 null 键和 null 值,Hashtable 不允许
  3. 有序性选择:
    • HashMap:无序
    • LinkedHashMap:按插入顺序
    • TreeMap:按键的自然顺序排序
  4. 线程安全:
    • 非并发场景用 HashMap
    • 高并发场景用 ConcurrentHashMap

3.3 Python使用示例

# 创建并操作字典
inventory = {"apples": 50,"bananas": 25,"oranges": 30
}# 更新库存
def add_stock(item, quantity):inventory[item] = inventory.get(item, 0) + quantityadd_stock("apples", 20)
add_stock("pears", 40)# 生成报告
print("Current Inventory:")
for item, qty in inventory.items():print(f"- {item.capitalize():<8}: {qty:03d} units")# 删除低库存项
low_stock = [item for item, qty in inventory.items() if qty < 30]
for item in low_stock:del inventory[item]print("\nFinal Inventory:", inventory)

输出结果:

Current Inventory:
- Apples  : 070 units
- Bananas : 025 units
- Oranges : 030 units
- Pears   : 040 unitsFinal Inventory: {'apples': 70, 'oranges': 30, 'pears': 40}

注意事项:

  1. 键的类型要求:
    • 必须是可哈希类型(不可变类型:str/int/tuple 等)
    • 值可以是任意类型
  2. 有序性:
    • Python 3.7+ 中字典保持插入顺序
    • 使用 collections.OrderedDict 获取更严格的有序保证
  3. 性能特性:
    • 查找时间复杂度 O(1)
    • 不要用 dict 替代类(应使用 dataclass 或自定义类)
  4. 内存优化:
    • 使用 sys.getsizeof() 查看字典内存占用
    • 对大量数据考虑使用 __slots__ 或第三方库(如 numpy)
  5. 常见陷阱:
    • 避免在遍历时修改字典结构
    • 不要用可变对象(如 list)作为键
    • None 可以作为键值

3.4 对比

特性 Python Go Java
初始化语法 {k: v} 或 dict() make(map[K]V) new HashMap<>()
空值处理 get(key, default) 返回零值 getOrDefault
有序性 Python 3.7+ 保持插入顺序 无序 可选有序实现
并发安全 需手动加锁 sync.Map ConcurrentHashMap
默认值处理 setdefault/defaultdict 需手动判断 computeIfAbsent

今日佳句:问渠那得清如许?为有源头活水来。

相关新闻

  • SqlServer Arithmetic overflow error converting expression to data type int
  • 医疗公有云市场第一!
  • 2025手持光谱仪/光谱分析仪/便携式光谱仪、矿石/元素分析仪、合金/金属/不锈钢/铝合金、贵金属、三元催化、赛普斯、IF光谱仪推荐榜

最新新闻

  • 解析2026年武汉会展场地对接服务:如何甄选兼具资源与实力的靠谱合作伙伴 - 品牌鉴赏官2026
  • JavaScript DXF Writer终极指南:在浏览器中生成CAD图纸的完整教程
  • 北京大理石修补推荐良匠千艺2026口碑榜 - 我叫一
  • Unity音频管理终极方案:高性能去中心化音频播放系统
  • 2026苏州专业处理离婚财产分割律师选择参考 - 品牌排行榜
  • 如何构建高效的股票智能分析系统:自动化部署与配置指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号