各位,咱们聊聊 JavaScript 里的队列吧。其实这个概念跟咱们坐火车排队检票或者去机场办理登机牌挺像,都是“先来后到”,谁也别想插队,这就叫先进先出(FIFO)。这东西在计算机里也一样,新元素从队尾进来,旧元素从队头出去。 这东西核心操作就四个,你完全能把它弄明白。第一个是 enqueue,也就是入队,就是把新东西往队尾一放,就像你去排队,排到最后面。举个例子,你想把数字8加进去,就写个 queue.enqueue(8),它立马就坐到队尾去了。第二个是 dequeue,出队,就是把队头那个家伙踢出去并返回值。比如你之前存的数字7就会被扔出来,剩下的2就成了新的队头。 还有 peek,这个挺有意思,就是偷窥一下队头是啥,看完了也不拿走,就像隔着玻璃看菜。最后是 length,这是报数,告诉你现在队列里还有几个东西。比如现在有4道菜在上面没上桌。 别看这几个操作看着简单,它们在 JavaScript 里的执行速度快得像魔法一样。不管队列里有10个还是100万个元素,enqueue、dequeue、peek、length 这几个动作都能在瞬间完成。因为它们内部只是访问数组或者做个加减法,时间复杂度就是 O(1),这在任何时候都是妥妥的。 你要是想用代码实现一个队列也不难。咱们可以定义一个 Queue 类,里面用 items 数组存数据,headIndex 和 tailIndex 这两个指针分别盯着头尾。Queue.prototype 里的方法就搞定了入队出队这些事。比如 dequeue 方法会删除队头元素并返回值;peek 就是返回队头的值不删除;length 就是尾巴减头得到当前长度。 实际用的时候要注意一个坑:在严格模式下直接删除数组元素可能会报错。所以真正干活的时候最好用 splice 来处理,或者干脆把数组重新洗一遍,别留空坑。 总之把这“长龙”的概念装进脑子就行。队列就是个先来先走的通道,核心就那四个动作,它能帮你做任务调度、消息传递、缓冲处理这些事儿。只要记住操作都是 O(1),队列再长速度也不变。