JS 队列,栈
js没有像java中的堆栈,队列的对象类型,只有数组;为了实现类似堆栈,队列的数据模型所以有了一下方法(个人理解,没有参考):
push(),unshift(),pop(),shift()
数组的下标是从起始位置开始到末位[0,n]
1.push()
该方法是在数组末尾添加任意多个元素,并返回添加之后的数组长度;
2.unshift()
该方法是在数组起始位置插入任意多个元素,并返回插入之后的数组长度;
3.pop()
该方法是删除数组末位的一个元素,并返回删除的元素;
4.shift()
该方法是删除数组起始位置的元素,并返回删除的元素;
注:任意多个元素是指push或者unshift不一定为一个元素,可以是数组;
arr.push([1,2,3]);
arr.unshift([1,2,3]);
队列的实现:FIFO(Fist-In-First-Out,先进先出)
1.队尾入队-push();队首出队-shift()
2.队首入队-unshift();队尾出队-pop()
栈的实现:LIFO(Last-In-First-Out,后进先出)
1.栈尾入栈-push();栈尾出栈-pop()
2.栈首入栈-unshift();栈首出栈-shift()
引用资料-方法性能测试(代码就不贴了,参考链接):
可见,unshift()比push()要慢差不多100倍!因此,平时还是要慎用unshift(),特别是对大数组。那如果一定要达到unshift()的效果,可以借助于Array的reverse()方法,Array的reverse()的方法能够把一个数组反转。先把要放进数组的元素用push()添加,再执行一次reverse(),就达到了unshift()的效果;
reverse()方法性能测试:
个人感觉这四个方法是两对(push,pop),(unshift,shift);按照这个组合使用时实现的是栈的模型,所以猜测设计者压根就木有想整出个队列模型,不过应阴差阳错的混搭之后就实现了队列(不是胡整);