在javascript中使用链接列表是否存在任何冒险行为?它在数组上的主要优势(例如)是我们可以在随机索引处插入元素而不移动每个元素,并且它们不限于作为数组的大小。
但是,JS中的数组会动态扩展,缩小,并且数组访问数据的速度更快。我们也可以使用Array.prototype.splice()
方法(实际上链接列表仍然比这个更快)来插入数据。
在JavaScript中使用链接列表对数组有什么好处(速度等等)吗?
使用JS的基本链接列表代码。
function list() {
this.head = null;
this.tail = null;
this.createNode=function(data) {
return {data: data, next: null }
};
this.addNode=function(data) {
if (this.head == null) {
this.tail = this.createNode(data);
this.head = this.tail;
} else {
this.tail.next = this.createNode(data);
this.tail = this.tail.next;
}
};
this.printNode=function() {
var x = this.head;
while (x != null) {
console.log(x.data);
x = x.next;
}
}
}
var list = new list();
list.addNode("one");
list.addNode("two");
list.printNode();
答案 0 :(得分:3)
如果您在前面或后面添加或附加元素,则在链接列表中,时间复杂度为O(1),但对于数组,它是O(n)。但是,如果使用索引从数组中检索元素,则时间复杂度将为O(1),而链表将为O(n)。
所以这取决于你要做什么,你需要创建基准测试,然后测试哪个操作需要花费多少时间。
您可以查看wiki:
答案 1 :(得分:1)
我不知道性能差异。正如您所说,链接列表在内存分配,垃圾收集,稀疏性方面优于其他语言中的数组,但Javascript数组处理其中一些问题。但是,如果您的用例需要这种数据结构,您仍然可能有理由使用链接列表:也就是说,您只需要从前面开始(或者使用双向链接列表的任一端)到达项目并从项目开始到下一个项目,不需要通过数组索引随机访问。
关于链接列表的一些丰富多彩的比喻:What is a practical, real world example of the Linked List?