mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2026-05-29 18:57:11 +08:00
fix(BoundedPriorityQueue): 修复 capacity<=0 时 offer() 抛 NullPointerException 的问题
当使用 capacity=0 构造 BoundedPriorityQueue 时,offer() 中 size()>=capacity 始终为 true, 调用 peek() 返回 null,然后 comparator.compare(e, null) 抛出 NullPointerException。 修复: 1. 构造函数中对 capacity<=0 做保护(初始容量最小为1,避免 PriorityQueue 内部异常) 2. offer() 中增加 capacity<=0 的提前返回,不接受任何元素
This commit is contained in:
@@ -26,11 +26,11 @@ public class BoundedPriorityQueue<E> extends PriorityQueue<E>{
|
||||
|
||||
/**
|
||||
* 构造
|
||||
* @param capacity 容量
|
||||
* @param capacity 容量,必须大于0
|
||||
* @param comparator 比较器
|
||||
*/
|
||||
public BoundedPriorityQueue(int capacity, final Comparator<? super E> comparator) {
|
||||
super(capacity, (o1, o2) -> {
|
||||
super(capacity <= 0 ? 1 : capacity, (o1, o2) -> {
|
||||
int cResult;
|
||||
if(comparator != null) {
|
||||
cResult = comparator.compare(o1, o2);
|
||||
@@ -53,6 +53,10 @@ public class BoundedPriorityQueue<E> extends PriorityQueue<E>{
|
||||
*/
|
||||
@Override
|
||||
public boolean offer(E e) {
|
||||
if (capacity <= 0) {
|
||||
// 容量为0或负数时,不接受任何元素
|
||||
return false;
|
||||
}
|
||||
if(size() >= capacity) {
|
||||
E head = peek();
|
||||
if (this.comparator().compare(e, head) <= 0){
|
||||
|
||||
Reference in New Issue
Block a user