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

学习分享数据结构对比

常用数据结构特点对比 | 数据结构 | 底层实现 | 核心特点 | 典型场景 | |--------------------|--------------------|------------------------------------------------------------------------------|----------------------------------| | 数组 (Array)| 连续内存空间 | 固定大小,随机访问快(O(1)),插入/删除需移动元素(O(n)) | 存储固定长度数据、快速查询场景 | | List | 接口(无具体实现) | 有序、可重复、支持索引访问,提供增删改查方法 | 需动态调整大小且有序存储的场景 | | ArrayList| 动态数组 | 基于数组实现,查询快(O(1)),扩容成本高(默认1.5倍),非线程安全 | 频繁读取、少量插入删除的场景 | | HashMap | 数组+链表/红黑树 | 键值对存储,无序,键唯一(允许null键),查询/插入/删除平均O(1),非线程安全 | 快速键值映射(如缓存、统计频次) | | HashSet | 基于HashMap实现 | 元素唯一,无序,基于哈希值存储,查询O(1),非线程安全 | 去重、快速判断元素是否存在 | | Queue | 接口(无具体实现) | 先进先出(FIFO),仅允许在队首删除、队尾添加元素 | 任务排队、消息队列等场景 | | Deque | 接口(双端队列) | 允许在两端插入/删除元素,支持FIFO和LIFO(栈)操作 | 双端操作场景(如滑动窗口) | | PriorityQueue | 堆(默认小顶堆) | 元素按优先级排序(默认自然顺序),队首为最小/最大值,插入O(log n)、查询O(1) | 任务调度、Top K问题 | 关键差异总结 - 有序性:ArrayList、Queue、Deque、PriorityQueue 是有序的(ArrayList按插入顺序,PriorityQueue按优先级);HashMap、HashSet 是无序的。 - 唯一性:HashSet、HashMap 的键要求唯一;List、Queue、Deque 允许重复元素。 - 线程安全:以上均非线程安全,需手动同步(如 `Collections.synchronizedList`)或使用并发容器(如 `ConcurrentHashMap`)。 哈希表的遍历方式取决于具体编程语言,但核心逻辑是遍历键值对,常见方式如下: 1. 遍历所有键(Keys) 通过获取哈希表的所有键,再逐个访问对应的值。 - Python:`for key in hashmap.keys()` - Java:`for (K key : hashmap.keySet())` - JavaScript:`for (let key of Object.keys(hashmap))` 2. 遍历所有值(Values) 直接遍历哈希表中存储的所有值,无需关注键。 - Python:`for value in hashmap.values()` - Java:`for (V value : hashmap.values())` - JavaScript:`for (let value of Object.values(hashmap))` 3. 遍历键值对(Key-Value Pairs) 同时获取键和值,适用于需要同时处理两者的场景。 - Python:`for key, value in hashmap.items()` - Java:`for (Map.Entry<K, V> entry : hashmap.entrySet())` - JavaScript:`for (let [key, value] of Object.entries(hashmap))` 4. 迭代器遍历(部分语言支持) 通过迭代器顺序访问哈希表元素,适合复杂逻辑控制。 - Java:`Iterator<Map.Entry<K, V>> iterator = hashmap.entrySet().iterator();` `while (iterator.hasNext()) { ... }` 注意事项 - 无序性:多数哈希表(如Python的`dict`、Java的`HashMap`)不保证遍历顺序与插入顺序一致。若需有序,可使用`LinkedHashMap`(Java)或Python 3.7+的`dict`(默认保留插入顺序)。 - 并发安全:遍历过程中修改哈希表可能导致异常(如Java的`ConcurrentModificationException`),需加锁或使用并发容器。
http://www.jsqmd.com/news/668813/

相关文章:

  • Spring Boot 自动装配原理(面试版 + 实战理解版)
  • 老年人扎堆学AI,背后藏着千亿级银发经济新蓝海
  • 别再让Quartus默认的1GHz时钟坑了你!手把手教你为FPGA点灯工程写SDC约束文件
  • 通风系统节能改造笔记:用PLC分段控制替代PID,稳定风压还省电(含现场数据对比)
  • 【2026年最新600套毕设项目分享】微信小程序的小说实体书商城(30106)
  • RKNN模型在RK3588上初始化失败?别慌,可能是你的虚拟环境和开发板版本对不上
  • AI开发-python-langchain框架(--pdf文件分页加载 )
  • Polkadot 技术栈地图 2026
  • 【计算机网络 实验报告6】路由选择协议
  • 从H264到H266:视频编码的‘乐高’块是如何越变越小的?一个动画演示看懂核心差异
  • 千问模型本地部署
  • 万字长文爆肝:彻底弄懂Linux文件系统(Ext2),从Inode、Block到Dentry核心机制全解析
  • 贵阳求职市场大洗牌:为什么AI营销和顾问型销售正在成为新的职业风口? - 精选优质企业推荐官
  • YOLOv5-face:面向实时人脸检测的优化架构与应用实践
  • 企业 Bug 管理工具推荐:8款主流缺陷跟踪系统对比解读
  • Google BwA 杭州场(Gemma 4 专题全国首发)线下活动记录
  • 别再混淆了!YOLOv5/v8模型评估里mAP@0.5和mAP@0.5:0.95到底怎么看?
  • 【热门技术深度讨论】AI Agent 自进化框架革命:从静态配置到生物级进化
  • 10年老兵带你学Java(第3课):数组和方法 - 代码的复用
  • 贵阳找工作该看什么?一份2026年本地招聘市场完整观察指南 - 精选优质企业推荐官
  • Product Hunt 每日热榜 | 2026-04-19
  • HarmonyOS原子化服务:轻量化应用的未来形态
  • Windows 10系统清理终极指南:让旧电脑重获新生的免费神器
  • 面试官灵魂拷问:Linux软链接与硬链接到底有什么区别?(附底层Inode级深度图解)
  • RKMEDIA VO图层配置与双屏显示实战
  • C语言分支循环作业错题与心得
  • 如何学好C语言:从入门到精通,掌握编程基石
  • 我重新梳理了一遍 RAG,终于明白它不只是接个向量库
  • 为什么92%的AGI项目在记忆对齐阶段失败?——2026奇点大会实测数据揭示5大认知断层与3步修复协议(含开源Memory-LLM v0.9预览版)
  • zmq源码分析之io_thread_t