是该 Queue 还是不该 Queue

那不应该是一个问题

排队观看星球大战:1977–2000年

没有人喜欢排队。大多数人都讨厌浪费时间排队。我们成年后平均要花6个月的时间来等待成年期的到来——差不多一年3天。有关于队列的纪录片 ²。甚至是学术专家都在排队。但是,当我们进行编码时,我们常常会忘记使用queues并最终搞砸了lists

当您使用正确的工具时,一切都会更好。

FIFO或LIFO1 !!!

超级市场中的队列FIFO。我们通常堆叠盒子的方式LIFO。 FIFO代表“先进先出”³。 LIFO“ 后进先出”的缩写就是这样!


我用draw.io绘制了这张图。很棒的工具!

在实现FIFO队列时,我们通常使用add、peek(返回队列的头部,但不删除)和poll(返回并删除队列的头部)方法,而我们分别在**LIFO **栈中将它们称为push、peek和pop。

 STACK STACKDEQUE

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值