Java中的比较器

Java中的比较器

Java中存在比较运算符:> 、< 、>=、<=、!=、==、instanceof
只能比较基本数据类型,如果对于对象无法进行比较,如果在对象中需要实现对象之间的比较,只能通过Comparable、Compartor接口实现

(1) Comparable接口(自然排序)
String、包装类都已经默认实现了Comparable接口,并重写了int compareTo(T o)方法(定义排序规则),所以String、包装类都是可以进行排序的
默认是按照升序进行排序的
int compareTo(T o)
如果返回值是正数,代表调用者(this)的值比o的值要大
如果返回值是负数,代表调用者(this)的值比o的值要小
如果返回值是0,代表调用者(this)的值比o的值相等
如果一个自定义类需要实现排序功能,需要让当前类实现Comparable接口,重写int compareTo(T o)方法,在该方法中重写排序的规则
如果一个类一旦实现了Comparable接口,那么这个类的对象在任意地方都可以进行排序或者比较

/*
String、包装类都已经默认实现了Comparable接口,并重写了int compareTo(T o)方法
*/
public class CompareDemo {
	public static void main(String[] args) {
		int[] arr = {5,4,2,1,3};
		Arrays.sort(arr);
		System.out.println(Arrays.toString(arr));
		
		String[] s = {"AA","CC","ZZ","BB","JJ"};
		Arrays.sort(s);
		System.out.println(Arrays.toString(s));
	}
}
/*
对象之间比较
*/
public class CompareDemo {
	public static void main(String[] args) {
		Employee[] e = new Employee[5];
		e[0] = new Employee("e001","Jack","d001");
		e[1] = new Employee("e005","Tom","d010");
		e[2] = new Employee("e010","Jack","d011");
		e[3] = new Employee("e004","Rose","d005");
		e[4] = new Employee("e009","Marry","d008");
		Arrays.sort(e);
		System.out.println(Arrays.toString(e));
	}
}
class Employee implements Comparable<Employee>{
	private String eno;
	private String ename;
	private String dept;
	public String getEno() {
		return eno;
	}
	public void setEno(String eno) {
		this.eno = eno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public String getDept() {
		return dept;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}
	public Employee(String eno, String ename, String dept) {
		super();
		this.eno = eno;
		this.ename = ename;
		this.dept = dept;
	}
	public Employee() {
		super();
	}
	@Override
	public String toString() {
		return "Employee [eno=" + eno + ", ename=" + ename + ", dept=" + dept + "]";
	}
	@Override
	public int compareTo(Employee o) {
		//借助String的compareTo方法
		return this.eno.compareTo(o.eno);
	}
}

(2)Comparator接口(定制排序)
如果一个类没有实现Comparable接口,但是这个类又不方便实现Comparable接口(开闭原则),或者一个类已经实现了Comparable接口,但是其中的compareTo不满足我们的需求,那么我们可以使用Comparator接口方式进行定制排序
默认升序
int compare(T o1,T o2)
o1>o2 返回正数
o1<o2 返回负数
o1==o2 返回0

public class CompareDemo {
	public static void main(String[] args) {
		Employee[] e = new Employee[5];
		e[0] = new Employee("e001","Jack","d001");
		e[1] = new Employee("e003","Tom","d010");
		e[2] = new Employee("e003","Jack","d011");
		e[3] = new Employee("e004","Rose","d005");
		e[4] = new Employee("e002","Marry","d008");
		Arrays.sort(e, new Comparator<Employee>() {

			@Override
			public int compare(Employee o1, Employee o2) {
				if(o1.getEno().compareTo(o2.getEno())!=0) {
					return o1.getEno().compareTo(o2.getEno());
				}else {
					return -o1.getEname().compareTo(o2.getEname());
				}
			}
		});
		System.out.println(Arrays.toString(e));
	}
}
class Employee {
	private String eno;
	private String ename;
	private String dept;
	public String getEno() {
		return eno;
	}
	public void setEno(String eno) {
		this.eno = eno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public String getDept() {
		return dept;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}
	public Employee(String eno, String ename, String dept) {
		super();
		this.eno = eno;
		this.ename = ename;
		this.dept = dept;
	}
	public Employee() {
		super();
	}
	@Override
	public String toString() {
		return "Employee [eno=" + eno + ", ename=" + ename + ", dept=" + dept + "]";
	}
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值