Java中的优先队列PriorityQueue的使用及相关方法
简单使用
PriorityQueue<Integer> p = new PriorityQueue<>();
优先级队列从队头取元素,从队尾添加元素。 默认情况下,队列中的数据是升序排序。
PriorityQueue<Integer> p = new PriorityQueue<>(); p.offer(5); p.offer(1); p.offer(3); p.offer(6); p.offer(8); while(!p.isEmpty()) { System.out.println(p.poll()); }
运行结果:
1 3 5 6 8
方法
和队列的方法基本一样
自定义排序规则
以下代码改变排序规则,从大到小:
PriorityQueue<Integer> queue=new PriorityQueue<>((o1,o2)->o2-o1); PriorityQueue<Integer> queue= new PriorityQueue<>(Comparator.reverseOrder());
根据HashMap的value值对HashMap的键值对排序
public static void main(String[] args) { HashMap<Integer, Integer> map = new HashMap<>(); map.put(1, 2); map.put(3, 4); map.put(5, 6); Set<Map.Entry<Integer, Integer>> entries = map.entrySet();//获取键值对 //自定义优先队列的排序规则,队列内存放的数据类型是键值对 //o1,o2都是键值对这样的对象 PriorityQueue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<>((o1, o2) -> { return o1.getValue() - o2.getValue();//根据值升序排序 }); for (Map.Entry<Integer, Integer> entry : entries) { queue.offer(entry);//将键值对放到优先队列中 } while(!queue.isEmpty()) { System.out.println(queue.poll().getValue()); } }
运行结果:
2 4 6
上一篇:
IDEA上Java项目控制台中文乱码