首发于code mojos

前端应用数据结构:何时使用链表

在网络上搜索何时使用链接列表,您可能会找到这样的答案:

  • 使用链接来解决哈希冲突的哈希表。
  • 简单的内存分配器。
  • FAT文件系统中大文件的元数据。

如果您是开发应用程序的前端开发人员,那么您实现内存分配器或哈希表的可能性有多大?这不太可能。在本文中,我们将介绍链表在前端应用程序中的实际用途。本文不会介绍如何实现链表。网上有很多关于此的文章。

现代前端应用程序中的链表存在一些问题:

  • 主要框架中的大部分模板都不能轻松使用链接列表。React和Vue就是两个例子。在React中,您只能将Arrays用于集合。其他任何事都会产生错误:

Vue模板中的首选集合数据结构也是一个数组。即使Vue正式支持迭代对象,这个迭代也是通过自己的属性(使用Arrays):

if (isObject(val)) {
  keys = Object.keys(val)
  ret = new Array(keys.length)
  for (i = 0, l = keys.length; i < l; i++) {
    key = keys[i]
    ret[i] = render(val[key], key, i)
}

链表是通过引用连接的对象。要迭代链表,您需要能够一步一步地遵循其引用。

虽然您可以在技术上使用Vue和React中的链接列表,但它需要大量工作。这是非标准的。它不干净。并且,它很可能表现不佳。

  • 即使您没有使用框架,您仍然可能不会经常使用链表。链表通常在修改具有大量更改的大型集合时显示其在性能提升方面的价值。前端集合通常不够大,以至于无法从链表提供的性能改进中受益。
  • 即使性能优化证明链表的使用是合理的,使用它的场景也是有限的。

何时使用链接列表(在前端应用程序中)

  • 您需要对列表进行大量修改 - 尤其是在列表末尾之外的某处添加或删除项目时。实时更新的股票代码,并将新项目添加到列表顶部是一个很好的例子。
  • 您不需要经常访问链表中的单个项目 - 例如只读日志。这是因为虽然链表也可以实现查找某个项,但是相对于数组的索引,链表的查找要复杂得多,链表的查找是通过循环来实现的。
  • 当您需要在任一方向轻松导航列表时,双向链表非常有用。双向链表可以反向导航而不递归。

总结

在某些情况下,链表可以比数组快得多。但是,考虑到面向用户的应用程序的性质,前端应用程序中没有很多实际用途。使用大型数据集时,链表的大部分性能提升都会很明显。我们通常不会在前端处理这种大小的数据集。此外,现代框架中的大多数模板都不支持链表。所以,如果您正在使用React或Vue,它们不是一个很好的选择。请改用数组。

后记:此文章仅提供参考性的价值,目的在于发散读者的思维,但不代表上文所述都是对的。

发布于 2019-04-10 11:36