我正在寻找一个不允许重复元素的队列(旧的重复元素总是被删除,并且在队列末尾添加新元素)。并且是线程安全的。第一个线程正在向队列添加元素,第二个线程正在读取和删除元素。 标准 java 库或 guava/apache 中有什么有用的东西吗?
最佳答案
例如,您可以使用 Guava 的 Forwarding{,Blocking}{Queue,Deque}
。
然后您要做的就是将 HashSet
作为实现的一部分,您可以尝试从中尝试 .add()
新元素;如果 .add()
返回 false,则不添加到委托(delegate)。
当然,当您从队列中删除元素时,也不要忘记从集合中.remove()
!
(假设这里的“重复”指的是“are .equals()”;另一方面,如果您使用 PriorityQueue
,您将需要使用 TreeSet
代替)
关于Java队列和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23041467/