nan*_*nda 16 java collections priority-queue
PriorityBlockingQueue是无限的,但我需要以某种方式约束它.实现这一目标的最佳方法是什么?
有关信息,有界PriorityBlockingQueue将用于a ThreadPoolExecutor.
注意:通过有界我不想抛出异常,如果发生这种情况,我想将对象放入队列中,然后根据其优先级值进行剪切.有什么好方法可以做这件事吗?
Fra*_*k V 12
我实际上不会将它子类化.虽然我现在无法将示例代码放在一起,但我建议使用装饰模式的一个版本.
创建一个新类并实现您感兴趣的类实现的接口:PriorityBlockingQueue.我发现这个类使用了以下接口:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>
Run Code Online (Sandbox Code Playgroud)
在类的构造函数中,接受a PriorityBlockingQueue作为构造函数参数.
然后通过实例实现接口所需的所有方法PriorityblockingQueue.添加使其成为有界所需的任何代码.
这是我在Violet UML中放在一起的快速图表:
Google Collections/Guava库中有一个实现:MinMaxPriorityQueue.
可以使用最大大小配置最小 - 最大优先级队列.如果是这样,每次队列的大小超过该值时,队列将根据其比较器(可能是刚刚添加的元素)自动删除其最大元素.这与传统的有界队列不同,传统的有界队列在满时阻止或拒绝新元素.