猿问

无法理解优先队列进程

      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现在如何过去


红糖糍粑
浏览 150回答 1
1回答

慕的地6264312

引用 javadoc 的PriorityQueue:在方法提供的迭代iterator()是不保证遍历优先级队列中的元素中的任何特定顺序。如果您需要有序遍历,请考虑使用Arrays.sort(pq.toArray()).
随时随地看视频慕课网APP

相关分类

Java
我要回答