java - 为什么在执行 poll() 时优先队列重新排序元素?
问题描述
今天当我从优先队列中 poll() 元素时,我意识到在 poll() 元素之后,队列中的其余元素改变了顺序。基本上我有优先级队列,我重写 Comparator 方法,让他们按照它在字符串中出现的次数排序(最大堆)
Queue<Character> pq = new PriorityQueue<>(new Comparator<Character>(){
@Override
public int compare(Character a, Character b) {
if(map.get(a) == map.get(b)) {
return map.get(a) - map.get(b);
}
return map.get(b) - map.get(a);
}
});
如果我有一个字符串“aabbcc”,每个字符的频率将是
['a':2, 'b':2, 'c':2]
优先队列将是
['a','b','c']
当我执行 poll() 时,优先级队列变为:
['c', 'b']
为什么不['b','c']?
任何帮助,将不胜感激。
解决方案
推荐阅读
- c - 在 x86 程序集中将浮点文字转换为 int 表示?
- swift - 对成员 'tableView(_:didSelectRowAt:)' 的模糊引用(Swift)
- c# - Unity 中的加速
- reactjs - 使用 Ejected Create React App 设置同构 SSR 的教程
- vba - 在VBA中从A2删除行到列的末尾
- java - 使用简单的 txt 文件进行 Selenium 参数化的黄瓜
- azure-data-lake - 如何在不使用 Visual Studio 的情况下在 Microsoft azure 数据分析中引用用户定义的运算符 (UDO)
- excel - 可以从选择中确定数据透视字段的位置吗?
- python - 拆分字符串时出现AttributeError
- mysql - 如何使用 mysqli 加速此查询?