Java比较器Comparable和Comparator的快速使用

Comparable

java.lang.Comparable是在一个类定义的时候实现好的接口。
实现Comparable接口的类必须实现public int compareTo()方法,定义类对象内部的排序规则,此后可以使用Collections.sort()或者Arrays.sort()来进行排序。

package util;

import java.util.Arrays;

public class Comparable用法 {
     

	public static void main(String[] args) {
     
		Person[] ps = new Person[3];
		ps[0] = new Person("张三", 20);
		ps[1] = new Person("李四", 30);
		ps[2] = new Person("王五", 10);
		Arrays.sort(ps);
		System.out.println(Arrays.toString(ps));
	}
}

//必须实现Comparable接口才能实现对象的大小比较
class Person implements Comparable<Person> {
     

	String name;
	int age;

	Person(String name, int age) {
     
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
     
		return this.name + " " + this.age;
	}

	@Override
	public int compareTo(Person p) {
     
		// 这里调用Integer已经实现好的compare方法,按年龄升序排序
		// 如果想要实现降序,只需要在Integer前面加上一个负号(-)即可
		return Integer.compare(this.age, p.age);
	}
}


Comparator

java.util.Comparator是专门定义一个类的比较规则,不需要在原来的类上实现接口。
Comparator同样需要实现public int compareTo()方法,一般用于临时指定排序规则,属于挽救的比较操作。

package util;

import java.util.Arrays;
import java.util.Comparator;

public class Comparator用法 {
     
	
	public static void main(String[] args) {
     
		Man[] ms = new Man[3];
		ms[0] = new Man("张三", 20);
		ms[1] = new Man("李四", 30);
		ms[2] = new Man("王五", 10);
		Arrays.sort(ms, new Comparator<Man>() {
     
			@Override
			public int compare(Man o1, Man o2) {
     
				return Integer.compare(o1.age, o2.age);
			}
		});
		System.out.println(Arrays.toString(ms));
	}
}

class Man{
     
	String name;
	int age;
	
	Man(String name, int age) {
     
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
     
		return this.name + " " + this.age;
	}
		
}

总结:

如果定义某个类,一开始的设计就需要排序,那就使用Comparable接口。(常用)
如果是某个数组或列表需要重新定义排序规则,想快速临时定义排序规则,就使用Comparator接口。

你可能感兴趣的:(java基本语法,java)