我在应用程序中使用ArrayBlockingQueue已经很多年了,对于我的目的来说运行良好。 到目前为止,我只需要调用put()和take()。 这已经足够了。
现在有一个要求,即在通过take()检索元素时,必须满足某些条件。 如果不符合条件,则应将其放回队列,但在先前所在的相同位置。
想象一下在国际机场海关的一条线上。由于某种原因,乘客仅在上车时获得海关申报表。乘客正在疯狂地涂鸦以在轮到他们之前完成表格。 有一个安保人员站在排队的最前面。当海关官员准备就绪迎接下一个乘客时,安保人员会检查排在最前面的第一个乘客是否已填写完海关申报单。 如果是这样,他会将该乘客发送到海关官员那里。 如果没有,他会依次检查第二个乘客,第三个乘客等,直到找到已完成填写的人。他会将该人员发送到海关官员。 每当海关官员空闲时,总是从排在最前面的第一个乘客开始。
在研究中,我唯一想到的是使用双端队列(deque),从队列的前面取出元素,直到找到符合条件的元素。 然后以我取出元素的相反顺序将元素放回到前面。
有没有什么建议?
poll()
上检查1;如果它没有准备好,您就会offer()
它。现在您的队列是[2、3、1]。下一个poll()
返回2,它已准备好,因此您将其返回。下一次迭代,您有队列[3、1]。如果它们都准备好,您将返回错误的那个。 - DavidW