那不应该是一个问题
没有人喜欢排队。大多数人都讨厌浪费时间排队。我们成年后平均要花6个月的时间来等待成年期的到来——差不多一年3天。有关于队列的书、纪录片 ²。甚至是学术专家都在排队。但是,当我们进行编码时,我们常常会忘记使用queues
并最终搞砸了lists
。
当您使用正确的工具时,一切都会更好。
FIFO或LIFO1 !!!
超级市场中的队列是FIFO。我们通常堆叠盒子的方式是LIFO。 FIFO代表“先进先出”³。 LIFO是“ 后进先出”的缩写。就是这样!
我用draw.io绘制了这张图。很棒的工具!
在实现FIFO队列时,我们通常使用add、peek(返回队列的头部,但不删除)和poll(返回并删除队列的头部)方法,而我们分别在**LIFO **栈中将它们称为push、peek和pop。
STACK、 STACK和DEQUE
Stack中我们只能添加和删除元素从一端(后进先出),在一个队列,我们添加元素和删除它们从另一端(FIFO),加入这两个世界我们有双端队列(又名“双结束队列”),我们可以从两端添加和删除元素。它们都不允许对元素进行随机访问。
val stack = Stack<String>()
stack.push("first")
stack.push("second")
stack.push("last")
println(stack) // [first, second, last]
println(stack.peek()) // last
println(stack) // [first, second, last]
println(stack.pop()) // last
println(stack) // [first, second]
val queue: Queue<String> = LinkedList()
queue.add("first")
queue.add("second")
queue.add("last")
println(queue) // [first, second, last]
println(queue.peek()) // first
println(queue) // [first, second, last]
println(queue.poll()) // first
println(queue) // [second, last]
val queue: Deque<String> = LinkedList()
queue.addFirst("first")
queue.add("second")
queue.addLast("last")
println(queue) // [first, second, last]
println(queue.peekFirst()) // first
println(queue.peekLast()) // last
println(queue) // [first, second, last]
println(queue.pollFirst()) // first
println(queue) // [second, last]
println(queue.pollLast()) // last
println(queue) // [second]
在JAVA中,您应该使用deque来对堆栈建模,因为堆栈类被认为是过时的(它扩展了Vector类并继承了它的所有方法,这使得打破LIFO原则成为可能)。
因此,不要重新发明轮子 ⁴。
原文链接:https://dev.to//hector6872/to-queue-or-not-to-queue-4d2a