什么是Java队列中的dequeue()和front()之间的区别?

时间:2014-12-14 03:26:31

标签: java queue

我正在阅读的一些大学笔记中有两个定义。

“dequeue():从队列前面删除对象并返回它;如果队列为空则发生错误”

“front():返回队列中的前端对象,但不要删除它;如果队列为空则发生错误”

我理解出队方法,但前面的方法让我有点困惑。只是想知道是否有人使用正面方法的一个很好的例子,所以我可以了解两者之间的差异。感谢。

2 个答案:

答案 0 :(得分:1)

想象一下具有单个生产者和多个消费者的场景。特定的线程安全队列用作不同生产者和消费者之间的缓冲区。

现在想象一下,特定的消费者只能处理队列中某种类型的数据。它可以使用front()方法查看下一个数据,看看它是否真的可以处理它,然后如果可以,则调用dequeue()。如果不能,则根本不会调用dequeue(),不会修改队列。

可以说,在同一场景中,您可以调用dequeue()来获取数据,检查数据,确定是否可以处理数据。如果没有,请再次添加到队列的前面。但是在这种情况下,由于队列被修改两次需要花费更多的精力,并且将元素放回队列前面的动作可能是昂贵的或完全禁止的。最有可能的是,您将元素添加到队列末尾,从而中断了队列流程顺序。

front()方法是一种优化队列访问的方法,它通过将对队列进行的修改次数保持在最小值,因为队列修改通常比简单的查找更加昂贵。通过查看第一个元素而不访问它,消费者可以决定他们是否真的要修改队列,与dequeue()相比减少修改次数并重新排队数据。

答案 1 :(得分:0)

假设您有一个Integer的队列,无论出于何种原因,您都在迭代它。您的UI上有一个标签,显示即将到来的号码。要更新该标签,您将使用youeQueue.front()检索有问题的号码而不将其删除。当您的下一次计算开始时,您的计算方法将使用yourQueue.dequeu()来检索下一个元素并将其从队列中删除。