Comparable和Comparator比较

1. Comparable

        Comparable是java.lang下面的接口

        java很多基础类都实现了Comparable接口

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
public final class Long extends Number implements Comparable<Long> {

        Comparable接口比较简单,里面只有一个compareTo方法。

public interface Comparable<T> {

    public int compareTo(T o);
}

        Comparable接口在实现的时候,必须指定比较的类型。

        当前值如果比o小,返回负数,

        如果比o大,返回正数,

        如果相等,返回0

示例:

public class Person implements Comparable<Person>{

	public int age;

	@Override
	public int compareTo(Person p) {
		return this.age-p.age;
	}

}

测试:

	public static void main(String[] args) {
		// 第一种方式比较
		Person p1 = new Person();
		Person p2 = new Person();
		p1.compareTo(p2);
	}

        如果一个类实现了Comparable接口,就能够使用Collections.sort方法

    public static <T extends Comparable<? super T>> void sort(List<T> list) {
        list.sort(null);
    }

2. Comparator

        Comparator是java.util包下面的接口

        如果一个对象实现了Comparator接口,自己就相当于了一个比较器

示例:

public class PersonComparator implements Comparator<Person>{

	@Override
	public int compare(Person p1, Person p2) {
		return p1.age-p2.age;
	}

}

测试:

	public static void main(String[] args) {
		// 第二种方式比较
		Person p1 = new Person();
		Person p2 = new Person();
		
		PersonComparator comparator = new PersonComparator();
		comparator.compare(p1, p2);
	}

3. 总结

实现Comparable接口相当于内部实现。需要类来实现这个接口,对代码不友好。

实现Comparator接口相当于外部实现。在外部新建一个类,实现这个接口,没有代码侵入。

猜你喜欢

转载自blog.csdn.net/u014209205/article/details/80915550