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())
.
添加回答
举报
0/150
提交
取消