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:
Busyliu
2026-03-02 05:42:05 +00:00
committed by Gitee
parent 885fd28de6
commit b4f1787df5

View File

@@ -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){