目录
既然大家想要了解优先队列的排序,那么说明已经知道什么事优先队列了,这里我就不多说了,直接说怎么排序了。
一、基本数据类型的排序
(1)升序
PriorityQueue默认的排序是从小到大。如下:
javaimport java.util.*; import java.io.*; public class Main { static PriorityQueue<Integer> queue=new PriorityQueue<>(); public static void main(String[] args) { queue.add(2); queue.add(30); queue.add(17); queue.add(27); queue.add(7); while(!queue.isEmpty()){ System.out.println(queue.poll()); } } }
(2)降序
javaimport java.util.*; import java.io.*; public class Main { static PriorityQueue<Integer> queue=new PriorityQueue<>(Comparator.reverseOrder()); public static void main(String[] args) { queue.add(2); queue.add(30); queue.add(17); queue.add(27); queue.add(7); while(!queue.isEmpty()){ System.out.println(queue.poll()); } } }
二、自定义类型如何排序
关于自定义类型,就是比如创建一个node类,其中有x和y两种属性,那么排序是按照x值还是按照y值来排序呢,这里我们就都按照x值来排序了,y值大家可以自己试试。下面我们来看看吧!
(1)升序
javaimport java.util.*; import java.io.*; public class Main { static PriorityQueue<node> q1=new PriorityQueue<node>(); static class node implements Comparable<node>{ int x,y; node(int x,int y){ this.x=x; this.y=y; } @Override public int compareTo(node o) { //排序 return this.x-o.x; } } public static void main(String[] args) { q1.add(new node(12,16)); q1.add(new node(2,30)); q1.add(new node(19,90)); q1.add(new node(32,17)); q1.add(new node(7,13)); while(!q1.isEmpty()){ node now=q1.poll(); int x=now.x; int y=now.y; System.out.println("x="+x+" y="+y); } } }
(2)降序
javaimport java.util.*; import java.io.*; public class Main { static PriorityQueue<node> q1=new PriorityQueue<node>(); static class node implements Comparable<node>{ int x,y; node(int x,int y){ this.x=x; this.y=y; } @Override public int compareTo(node o) { return o.x-this.x; } } public static void main(String[] args) { q1.add(new node(12,16)); q1.add(new node(2,30)); q1.add(new node(19,90)); q1.add(new node(32,17)); q1.add(new node(7,13)); while(!q1.isEmpty()){ node now=q1.poll(); int x=now.x; int y=now.y; System.out.println("x="+x+" y="+y); } } }