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

Hashmap 和 map的区别

✅ 1. 本质区别

特性std::mapstd::unordered_map(哈希表)
数据结构红黑树(平衡二叉搜索树)哈希表(Hash Table)
键值对有序吗?✅ 有序(按 key 升序排列)❌ 无序(由哈希函数决定)
查找/插入/删除时间复杂度O(log n)平均 O(1),最坏 O(n)
使用的底层机制树结构,自动排序哈希函数 + 拉链法等冲突解决

✅ 2. C++ 中的具体类名

类型C++ STL 名称属于哪个头文件
有序 mapstd::map<map>
无序 map(哈希表)std::unordered_map<unordered_map>

✅ 3. 使用场景建议

场景推荐使用
需要按 key 排序遍历std::map
只关注 key 的存在与否、查找效率std::unordered_map
高频查找、插入的场景,如 LeetCode 的 two sumstd::unordered_map
有大量数据,性能敏感std::unordered_map(但注意 hash 冲突)

哈希函数的核心意义:加速查找(从 O(n) → O(1))

结论: 如果key不用排序,无脑用hashmap就行

操作复杂度对比表

容器类型插入(Insert)查找(Find)更新(Update)是否有序适用场景
std::vectorO(1) 末尾O(n) 任意O(n)O(n)顺序存储,大量遍历/索引
std::listO(1) 已知位置O(n)O(n)O(n)频繁插入/删除,顺序不重要
std::mapO(log n)O(log n)O(log n)有序映射,需要 key 排序
std::unordered_mapO(1) 平均O(n) 最坏O(1) 平均O(n) 最坏O(1) 平均O(n) 最坏快速 key-value 存储查找

 

使用选择建议

场景推荐容器
快速查找 key-valueunordered_map
查找 + key 排序map
按索引查 + 顺序处理vector
频繁插入删除 + 顺序list

情况推荐容器原因说明
频繁遍历所有元素vector连续内存 + cache 友好 + 快速读取
频繁插入/删除中间元素list插入/删除 O(1),不用移动后续元素
查找元素是否存在(按 key)unordered_map哈希查找快

 

vector list对比

对比点vector(数组)list(链表)
内存布局连续内存非连续,节点分散
遍历方式顺序访问,支持索引通过指针跳转,每个节点跳一次
CPU cache 命中率高(预取 + 缓存行友好)低(跳跃式访问,缓存失效)
实际遍历性能快得多,几乎是线性流式处理明显慢,每个节点都需解引用指针访问

 

http://www.xdnf.cn/news/6460.html

相关文章:

  • 入门消息队列
  • ProceedingJoinPoint的认识
  • 机器学习分类
  • AM1.5G太阳光模拟器参数
  • DeepSeek推理优化技巧:提升速度与降低成本
  • 代码随想录算法训练营第四十一天
  • 【Pandas】pandas DataFrame eval
  • STM32 DMA技术深度解析:从原理到实战应用讲解
  • 激光雷达视觉定位是3D视觉定位吗?
  • GCC 使用说明
  • 专项智能练习(定义判断)_DA_01
  • 案例:塔能精准能耗节能技术,驱动工厂智能变革
  • 异步日志系统01——日志系统框架
  • 扬州卓韵酒店用品:优质洗浴用品,提升酒店满意度与品牌形象
  • 应用BERT-GCN跨模态情绪分析:贸易缓和与金价波动的AI归因
  • OpenCV CUDA模块中矩阵操作------范数(Norm)相关函数
  • 面试题:介绍一下JAVA中的反射机制
  • Springboot考研信息平台
  • 25.第二阶段x64游戏实战-分析物品相关数据
  • CSS 布局系统深度解析:从传统到现代的布局方案
  • 深入浅出:Windows系统DLL劫持提权原理
  • Java Socket编程完全指南:从基础到实战应用
  • SSTI 刷刷刷个题
  • 使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据(申请key教程)
  • 电总协议调试助手更新-PowerBus-v1.0.5
  • 实验5 DNS协议分析与测量
  • 油漆面积--二维差分求区间变化
  • 测序的原理
  • java-JUC概述(进行分类总结-包含原子类、并发集合、线程等)
  • 生成式AI在编程中的应用场景:从代码生成到安全检测