是否值得在Javascript中创建链接列表

时间:2014-03-09 08:58:10

标签: javascript arrays performance memory-management linked-list

我目前正在开发一个项目,要求我遍历一个值列表,并在列表中已有的每个值之间添加一个新值。这将在每次迭代时发生,因此列表将呈指数级增长。我决定将列表实现为链接列表是个好主意。现在,JS没有默认的Linked List数据结构,我创建一个没有问题。

但我的问题是,从头开始创建一个简单的链接列表是否值得,或者只是创建一个数组并使用splice()插入每个元素会更好吗?事实上,由于开销会不会有效率呢?

3 个答案:

答案 0 :(得分:7)

使用链接列表,事实上,由于规范复杂性和体面的JIT,大多数在用户javascript中完成的自定义实现将超过内置实现。例如,请参阅https://github.com/petkaantonov/deque

乔治所说的每一点都是100%错误,除非你把时间机器带到10年前。


至于实现,不要创建包含值的外部链表,而是使值自然地链接列表节点。否则你将使用太多的记忆。

答案 1 :(得分:3)

使用splice()插入每个元素的速度会慢一些(插入n个元素需要O(n²)时间)。但是简单地构建一个新数组(追加新值并以锁步方式附加旧值)并丢弃旧数组需要线性时间,并且最有可能具有比操纵链表更好的常数因子。它甚至可能占用更少的内存(链表节点可能会有惊人的大空间开销,特别是如果它们不是侵入性的。)

答案 2 :(得分:-1)

Javascript是一种解释性语言。如果你想实现一个链表,那么你将循环很多!口译员将缓慢地执行。 intrepreter提供的内置函数已经过优化,并使用解释器进行编译,因此它们运行得更快。我会选择对数组进行切片,然后再次连接所有内容,它应该比实现自己的数据结构更快。

同样,javascript不是通过指针/引用传递值,那么你将如何实现一个链表呢?