为了账号安全,请及时绑定邮箱和手机立即绑定

无法理解优先队列进程

无法理解优先队列进程

红糖糍粑 2021-12-01 19:00:19
      String S = "aaaaaaaacabbbb";        if (S == null || S.length() == 0) {            return;        }        Map<Character, Integer> map = new HashMap<>();        for (char c : S.toCharArray()) {            map.put(c, map.getOrDefault(c, 0) + 1);        }        PriorityQueue<Map.Entry<Character, Integer>> pq = new PriorityQueue<>((a, b) -> (b.getValue() - a.getValue()));        pq.addAll(map.entrySet());        System.out.println(pq);所以,我明白对于这个特定的片段,最高优先级被赋予最大值的键,当我打印队列时,我得到[a=9, b=4, c=1]但是当我使用这个比较器时PriorityQueue<Map.Entry<Character, Integer>> pq = new PriorityQueue<>((a, b) -> (a.getValue() - b.getValue()));我不明白为什么它会给[c=1, a=9, b=4]我以为b会是第二个,而且a会是最后一个第二个问题另外,当我添加一个条目时  Map.Entry<Character, Integer> entry = new java.util.AbstractMap.SimpleEntry<Character, Integer>('a', 5);            pq.offer(entry);我得到这个输出[c=1, a=5, b=4, a=9]不明白a现在如何过去
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

引用 javadoc 的PriorityQueue

在方法提供的迭代iterator()保证遍历优先级队列中的元素中的任何特定顺序。如果您需要有序遍历,请考虑使用Arrays.sort(pq.toArray()).


查看完整回答
反对 回复 2021-12-01
  • 1 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信