这本书开头讲了很多的基础知识,我也是浏览一下过去了,然后看到自己感兴趣的地方,栈和队列,大家应该都知道在js中数组有push与pop方法,但是作者没有使用,她在一开始是用的数组定义的,但是考虑到效率问题,换成了对象。
class Stack{
constructor(){
this.count = 0;
this.items = {};
}
push(elem){
this.items[this.count++] = elem;
}
pop(){
if(this.isEmpty()){
return undefined;
}
const result = this.items[--this.count];
delete this.items[this.count];
return result;
}
isEmpty(){
return this.count === 0;
}
}
书中这样解释的:“创建一个Stack类最简单的方式是使用一个数组来存储元素。在处理大量数据的时候,我们同样需要评估如何操作数据是最高效的。
使用数组时,大部分方法的时间复杂度是O(n)。简单理解:O(n)的意思为我们需要迭代整个数组直到找到要找的那个元素,在最坏的情况下需要迭代数组的所有位置,其中的n代表数组的长度。数组越长,所需时间会更长。另外,数组是元素的一个有序集合,为保证元素的有序排列,会占用更多的内存空间。
使用JavaScript对象来存储所有的栈元素,以实现可以直接获取元素,同时占用较少的内存空间,同时保证所有的元素按照我们的需要进行排列,遵循后进先出(LIFO)原则。”