java - 为什么我无法从 PriorityQueue 中删除通过 peek() 获取的元素?

标签 java deque peek

这是我的代码。

class MinStack {
    public Deque<Integer> deque = new LinkedList<Integer>();
    public PriorityQueue<Integer> pq = new PriorityQueue<Integer>();

    public MinStack() {
        Deque<Integer> deque = new LinkedList<Integer>();
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    }

    public void push(int x) {
        deque.offer(x);
        pq.offer(x);
    }

    public void pop() {
        pq.remove(deque.peek()); 
        deque.pollLast();        
    }

    public int top() {
        return deque.peekLast();
    }

    public int getMin() {
        return pq.peek();
    }
}

在函数 pop() 中,PriorityQueue 不会删除我从 deque.peek() 获得的最高值。 当我将其更改为

pq.remove(deque.pollLast());   

它成功了。这是为什么?

最佳答案

Deque.peek() 返回双端队列的第一个元素,与 peekFirst() 相同。使用 peekLast() 代替,就像在 top() 中所做的那样。

关于java - 为什么我无法从 PriorityQueue 中删除通过 peek() 获取的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61146048/

相关文章:

c++ - 为什么我得到的 deque 的 max_size() 小于 vector 的 max_size()?

Groovy 'Peeking' 前面带有迭代器?

java - 如何在 Java 的非缓冲阅读器中查看单个字符

Java - 可编辑组合框验证

java - 使用 OnStartupTriggeringPolicy 和 DirectWriteRolloverStrategy 删除旧日志文件

java - Android:捕获每种可能类型的 "Enter"键(硬键和软键)的代码?

java - 如何在 Java 中生成 map ?

python - 如何在 python 中通过 flask 发送双端队列集合

java - 覆盖循环数组中的迭代器

Java Stack peek() 行为