据我所知,队列有责任遵守先进先出的行为。
您可能一直在阅读教科书或一些讲义或描述理想化 FIFO 队列如何工作的东西。但是你没有意识到并不是所有的队列都是先进先出的。不在现实世界中,也不在计算机系统中。(例如,如果(假设)奥巴马总统去了一家繁忙的麦当劳餐厅,您会发现他立即被排在了队列的最前面。这是一个以非先进先出方式表现的队列。)
无论如何,JavaQueue
是任何类型队列的接口,而不仅仅是 FIFO 队列。它还支持优先级队列,以及您可以想到的任何其他排队语义……如果您愿意提供自己的实现类。
另一点是该remove(E)
操作不提供“请下一位客户”操作。这相当于一个顾客决定他们真的更喜欢披萨……然后走出门外。理想化的队列不支持这一点,但可用的库类支持......因为应用程序需要能够做这种事情。
底线是 JavaCollection
类层次结构(包括线索Queue
)被设计为有用且易于使用,而不是严格适合某人的数据结构抽象模型。
但是 Queue 可能允许一个偷偷摸摸的方法,它可以让你潜入队列的中间——那个方法在哪里?
好吧,因为大多数实际应用程序不需要它,所以它不存在。(如果这是一个常见的用例,即使不在Queue
接口中,也会在特定的队列实现类中提供这样的方法。)
再一次,Java 类和接口是针对它们在实际程序中的实用性和可用性而指定的,而不是(在这种情况下)因此它们可以在汉堡联合中对 POTUS 进行建模。
可能我被我在学校做过的教科书定义和 C/C++ 实验室洗脑了。
另一种解释是您误解了定义等的真正目的。