Java Comparable Comparator对比

java.lang.Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String  Integer自己就可以完成比较大小操作)即 对象必须实现这个接口Comparable比较用的方法是Arrays.sort(对象数组)。 Comparable而是需要对象实现Comparable<对象>
   
java.util.Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。 Comparator比较用的方法是Collections.sort(list, new Comparator()); Comparator需要自己写一个比较类。

compareTo和compare方法返回1则表示需要交换 -1则不需要交换

package test.Compare;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class CompareTest {
	public static void main(String[] args) {
		List<PersonA> list = new ArrayList<PersonA>();
		PersonA p1 = new PersonA(23);
		list.add(p1);
		PersonA p2 = new PersonA(21);
		list.add(p2);
		PersonA p3 = new PersonA(29);
		list.add(p3);
		Object pArr[] = list.toArray();
		Arrays.sort(pArr);
		for (Object v : pArr) {
			System.out.println(v);
		}
		List<PersonB> list1 = new ArrayList<PersonB>();
		PersonB p4 = new PersonB(23);
		list1.add(p4);
		PersonB p5 = new PersonB(21);
		list1.add(p5);
		PersonB p6 = new PersonB(29);
		list1.add(p6);
		//从小到大顺序
        Collections.sort(list1, new SortPersonBAge());
        for (PersonB v : list1) {
			System.out.println(v);
		}
        //从大到小
        Collections.reverse(list1);
        for (PersonB v : list1) {
			System.out.println(v);
		}
	}
};

// Comparable是java.lang包里面的Arrays.sort(pArr);
class PersonA implements Comparable<PersonA> {
	private int age;

	public PersonA(int age) {
		super();
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public int compareTo(PersonA o) {
		if (this.age > o.getAge())
			return 1;
		else if (this.age < o.getAge())
			return -1;
		return 0;
	}

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


class PersonB {
	private int age;

	public PersonB(int age) {
		super();
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return this.age + " ";
	}
}
//Comparable Comparator是java.util包体里面的
class SortPersonBAge implements Comparator<PersonB> {
	
	@Override
	public int compare(PersonB o1, PersonB o2) {
		if (o1.getAge()>o2.getAge()) {
			return 1;
		} else if (o1.getAge()<o2.getAge()) {
			return -1;
		}
		return 0;
	}
};

你可能感兴趣的:(comparator)