📅  最后修改于: 2023-12-03 15:31:53.181000             🧑  作者: Mango
在 Java中,LinkedBlockingDeque是一种双向队列,允许在队尾和队头同时进行入队和出队操作,并且在多线程环境下保证线程安全。LinkedBlockingDeque提供了retainAll()方法,用于保留队列中包含在指定集合中的元素,将不属于指定集合的元素从队列中删除。
LinkedBlockingDeque retainAll() 方法的语法如下:
public boolean retainAll(Collection<?> c)
参数说明:
返回值:true表示队列发生了变化,false表示队列未发生变化。
下面是使用LinkedBlockingDeque retainAll()方法的示例代码:
import java.util.concurrent.LinkedBlockingDeque;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
LinkedBlockingDeque<String> deque = new LinkedBlockingDeque<>();
deque.add("apple");
deque.add("banana");
deque.add("orange");
deque.add("watermelon");
System.out.println("原始队列:");
System.out.println(deque);
String[] fruits = {"banana", "watermelon"};
boolean result = deque.retainAll(Arrays.asList(fruits));
System.out.println("过滤后的队列:" + deque);
System.out.println("是否发生了变化:" + result);
}
}
输出结果:
原始队列:
[apple, banana, orange, watermelon]
过滤后的队列:[banana, watermelon]
是否发生了变化:true
在上面的示例中,创建了一个LinkedBlockingDeque对象,然后向队列中添加了四种水果。然后将含有“banana”和“watermelon”的水果过滤出来,使用LinkedBlockingDeque的retainAll()方法,最终得到了过滤后的队列。输出结果表明队列发生了变化,即元素被成功过滤。