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

常见数据结构

常见数据结构

  • 1. 数组(Array)
  • 2. 对象(Object)
  • 3. 栈(Stack)
  • 4. 队列(Queue)
  • 5. 链表(Linked List)
  • 6. 树(Tree)
  • 7. 集合(Set)
  • 8. 哈希表(Hash Table)
  • 9. 图(Graph)
  • 10. 堆(Heap)
  • 11. 不可变数据结构(Immutable.js)
  • 12. ES6+ 新增结构
  • 总结

1. 数组(Array)

  • 用途:存储有序数据集合,适用于列表渲染、数据遍历等场景。
  • 典型操作:push(), pop(), splice(), map(), filter(), reduce()。全数组方法应用可以看这篇文章
  • 应用场景:
    • 渲染列表(如 React/Vue 中的动态列表)。
    • 处理表单数据或 API 返回的集合。
    • 实现队列或栈(通过数组方法模拟)。

2. 对象(Object)

  • 用途:键值对存储,用于表示实体属性或快速查找数据。
  • 典型操作:Object.keys(), Object.values(), Object.entries()。
  • 应用场景:
    • 组件状态管理(如 React 的 useState 对象)。
    • 配置项或映射表(如路由配置、国际化字段)。
    • 缓存数据(通过键快速访问)。

3. 栈(Stack)

  • 用途:后进先出(LIFO)结构,用于管理函数调用、撤销操作等。
  • 实现方式:数组模拟(push 和 pop)。
  • 应用场景:
    • 浏览器历史记录(路由跳转栈)。
    • 撤销/重做功能(如富文本编辑器)。
    • 递归函数调用(调用栈)。

4. 队列(Queue)

  • 用途:先进先出(FIFO)结构,用于处理异步任务、事件队列。
  • 实现方式:数组模拟(push 和 shift)。
  • 应用场景:
    • 浏览器事件循环(任务队列、微任务队列)。
    • 消息队列(如 WebSocket 消息顺序处理)。
    • 广度优先搜索(BFS)算法(如 DOM 树遍历)。

5. 链表(Linked List)

  • 用途:动态数据存储,插入/删除高效,但查找效率低。
  • 前端实现:可通过对象或类实现。
  • 应用场景:
    • React Fiber 架构中的任务调度链表。
    • 实现 LRU 缓存淘汰算法。
    • 需要频繁插入/删除的场景(如大型列表优化)。

6. 树(Tree)

  • 用途:分层数据存储,适用于嵌套结构。
  • 常见类型:DOM 树、组件树、虚拟 DOM、JSON 对象。
  • 应用场景:
    • 渲染 DOM 结构或组件层级(如 React/Vue 组件树)。
    • 文件目录结构、多级菜单。
    • 虚拟 DOM Diff 算法(优化渲染性能)。

7. 集合(Set)

  • 用途:存储唯一值,用于去重或成员检查。
  • ES6 实现:Set 对象。
  • 应用场景:
    • 去重数组([…new Set(array)])。
    • 标签管理、权限校验(检查元素是否存在)。
    • 事件监听器的唯一性管理。

8. 哈希表(Hash Table)

  • 用途:键值对存储,快速查找(O(1) 时间复杂度)。
  • ES6 实现:Map 对象(比普通对象更灵活,支持任意类型键)。
  • 应用场景:
    • 缓存数据(如 API 响应缓存)。
    • 实现字典或频率统计(如字符出现次数)。
    • 组件间共享状态(如全局状态管理)。

9. 图(Graph)

  • 用途:表示复杂关系网络,节点和边的集合。
  • 前端实现:通过对象或 Map 存储邻接表/邻接矩阵。
  • 应用场景:
    • 社交网络关系可视化。
    • 依赖关系分析(如 Webpack 模块依赖图)。
    • 路径规划(如地图应用的最短路径)。

10. 堆(Heap)

  • 用途:优先队列,快速获取最大值或最小值。
  • 前端实现:数组模拟(通过索引操作)。
  • 应用场景:
    • 任务调度(如高优先级任务优先执行)。
    • 实现 Top K 问题(如统计高频关键词)。

11. 不可变数据结构(Immutable.js)

  • 用途:通过持久化数据结构优化状态管理性能。
  • 库支持:Immutable.js、Immer。
  • 应用场景:
    • Redux 状态管理(避免直接修改状态)。
    • 复杂对象的深拷贝优化。
    • 提升 React 渲染性能(通过浅比较判断变化)。

12. ES6+ 新增结构

  • WeakMap/WeakSet:弱引用存储,避免内存泄漏(如缓存 DOM 节点)。
  • TypedArray:处理二进制数据(如 WebGL、Web Audio API)。
  • ArrayBuffer:操作原始二进制数据。

总结

前端开发者需要根据场景选择合适的数据结构:

  • 简单数据:数组、对象、Set、Map。
  • 复杂交互:栈、队列、链表。
  • 性能优化:树、堆、不可变数据结构。
  • 框架底层:React Fiber(链表)、虚拟 DOM(树)、状态管理(哈希表)。

掌握这些数据结构有助于编写高效、可维护的前端代码,尤其在处理复杂状态、性能优化和算法场景时。

相关文章:

  • 【系统分析师之1、绪论+2、数学与工程基础】
  • 【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——LED、按键测试
  • 删除win11电脑上的阿尔巴尼亚输入法SQI
  • OSPF综合实验
  • MySQL——流程控制
  • 【Unity笔记】Unity开发笔记:ScriptableObject实现高效游戏配置管理(含源码解析)
  • 全国青少年信息素养大赛 C++算法创意实践挑战赛初赛 集训模拟试卷《二》及详细答案解析
  • ACI EP Learning Whitepaper 3. Disabling IP Data-plane Learning 功能
  • Vue3服务端渲染(SSR)深度调优:架构裂变与性能突围
  • bC一体化是传统批发企业 换道超车的唯一路径
  • Spring Cache(笔记)
  • 第二天 通过脚本控制物体移动和旋转
  • 03 UV
  • Flutter实战(1)-- 调试工具
  • 处理 Flutter 没有反应
  • 【C++算法】59.哈希表_存在重复元素 II
  • 排序算法复杂度及稳定性全解析(八种排序)
  • Spark-SQL核心编程(二)
  • HL7消息编辑器的使用手册
  • 案例 - 登录认证:保障系统安全访问的实现
  • 【社论】以“法治之盾”护航每一份创新
  • 11-13世纪的地中海贸易
  • 山西10岁男孩遭生母和继父殴打遇害,案件庭审延期
  • 中国气象局:针对山西、广西、陕西启动抗旱四级应急响应
  • 谭秀洪任广西梧州市人大常委会党组书记,此前任北海市委常委
  • 广西北海市人大常委会副主任李安洪已兼任合浦县委书记