java学习笔记之对象的排序

一、类的排序

在平常的代码编写中,经常会遇到需要对对象进行排序的问题,并且当对象里面的属性很多时,这时候就需要上黑科技-比较器来解决了。

只需要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());
		}
	}
	
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值