gpt4 book ai didi

Java阻塞队列查找、获取和删除

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:41 27 4
gpt4 key购买 nike

在阻塞队列中,我们是否有API来实现这一要求,如果队列中有一个对象(比如字符串),则返回它,然后将其从队列中删除。

当然,我们可以循环队列,逐一进行if-else,如果不匹配,则放回队列。我们有更好的方法吗?

谢谢。

最佳答案

如果您只需要基于相等性进行比较(equals 方法),那么您可以使用 remove(Object o) BlockingQueue 的方法来删除对象。

例如

BlockingQueue<String> myQueue = new ArrayBlockingQueue<String>(10);
myQueue.add("hello");
myQueue.add("goodbye");
System.out.println("Queue contains goodbye: " + myQueue.contains("goodbye"));

myQueue.remove("goodbye");
System.out.println("Queue contains goodbye: " + myQueue.contains("goodbye"));

如果您需要根据其他条件删除对象,则必须使用可用的迭代器迭代队列。根据特定的实现队列,迭代器可能支持也可能不支持remove操作(检查特定类的文档)。 ArrayBlockingQueueLinkedBlockingQueue 都有支持 remove 的迭代器,实际上 ArrayBlockingQueue.remove(Object o) 的实现只是调用并使用它自己的迭代器和 iterator.remove。

例如

BlockingQueue<String> myQueue = new ArrayBlockingQueue<String>(10);
myQueue.add("hello");
myQueue.add("goodbye");
System.out.println("Queue contains goodbye: " + myQueue.contains("goodbye"));

Iterator<String> iterator = myQueue.iterator();
while(iterator.hasNext())
{
if (iterator.next().contains("good")) iterator.remove();
}
System.out.println("Queue contains goodbye: " + myQueue.contains("goodbye"));

如果队列的迭代器支持remove,那么这是比删除并重新添加所有其他队列元素(特别是在基于链表的队列的情况下)更优化的解决方案。

关于Java阻塞队列查找、获取和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25730078/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com