一、类的排序
在平常的代码编写中,经常会遇到需要对对象进行排序的问题,并且当对象里面的属性很多时,这时候就需要上黑科技-比较器来解决了。
只需要new 一个比较器,然后自己重写一个比较方法就好了,貌似不难,(*^__^*) 嘻嘻……
代码来了:
package xdlove_acmer; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.io.*; import java.lang.*; class node { int x,y; public node(int x,int y) { super(); this.x = x; this.y = y; } @Override public String toString() { return "Point [x=" + x + ", y=" + y + "]"; } } public class Main{ static Scanner cin = new Scanner(System.in); static PrintWriter out = new PrintWriter(System.out); public static void main(String[] args) throws IOException { node[] nodes = new node[3]; Random random = new Random(); for(int i = 0; i < 3; i++) { nodes[i] = new node(random.nextInt(10), random.nextInt(10)); } System.out.println(Arrays.toString(nodes)); Arrays.sort(nodes,new Comparator<node>() { //按x从小到大排,当x相等时,按y从小到大排。 public int compare(node a,node b) { if(a.x != b.x) return a.x - b.x; return a.y - b.y; } }); System.out.println(Arrays.toString(nodes)); } }
[Point [x=7, y=1], Point [x=6, y=7], Point [x=0, y=1]] //排序前 [Point [x=0, y=1], Point [x=6, y=7], Point [x=7, y=1]] //排序后
二、优先队列
优先队列也就是数据结构中我们所说的大顶堆或者小顶堆,队列符合先进先出的特性,当我们需要规定队列里面的对象的优先顺序时,这时候
优先队列就派上用场了。同样的,我们也是给优先队列一个比较器,定义我们想要的出队列顺序。
代码来啦:
package xdlove_acmer; import java.util.*; import java.util.function.Function; import java.util.function.ToDoubleFunction; import java.util.function.ToIntFunction; import java.util.function.ToLongFunction; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.io.*; import java.lang.*; class node { int x,y; public node(int x,int y) { super(); this.x = x; this.y = y; } @Override public String toString() { return "Point [x=" + x + ", y=" + y + "]"; } } public class Main{ static Scanner cin = new Scanner(System.in); static PrintWriter out = new PrintWriter(System.out); public static void main(String[] args) throws IOException { PriorityQueue<node> queue = new PriorityQueue<node>(new Comparator<node>() { public int compare(node a, node b) { //按x从小到大排,当x相等时,按y从小到大排。 if(a.x != b.x) return a.x - b.x; return a.y - b.y; } }); queue.add(new node(12, 3)); queue.add(new node(11, 3)); queue.add(new node(11, 1)); while(!queue.isEmpty()) { System.out.println(queue.remove().toString()); } } }