JDK11下的优先级队列小问题

优先级队列中存了我自定义的对象,比较规则写好了,存完了之后我去修改堆中对象的值(比较器中写的值),发现堆没有即刻相应调整,导致结果不对

但是每次我让堆中出一个,再进一个堆就调整好了

暂时不知道什么原因,猜测可能是堆中存对象的话需要改动才会调整。我猜不可能维护一个后台线程一直去调整它

答复:
通过简单阅读源码发现,其实优先级队列中的底层是数组,每次调整的核心方法就是siftUp和siftDown,而这两个方法在入队,出队中会调用。只有在队列变化的时候才进行调整更新。
很简单的一个小问题,源码读一读就能解开。



posted @ 2024-04-12 17:50  jeasonGo  阅读(24)  评论(0)    收藏  举报