Comparable 用作默认的比较方式;Comparator 用作自定义的比较方式,当默认的比较方式不适用时或者没有提供默认的比较方式,使用Comparator就非常有用。
像Arrays和Collections中的排序方法,当不指定Comparator时使用的就是默认排序方式,也就是使用Comparable。指定Comparator时就是使用提供的比较器。
sort(Object[]) 所有的对象都必须实现Comparable接口,它用来确定对象之间的大小关系;sort(Object[], Comparator) 对象不必实现Comparable接口,由Comparator来确定对象之间的大小关系。
package com.basic.compare; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class ObjectCompare { public static void main(String args[]) { ArrayList<User> list = new ArrayList<User>(); list.add(new User(20,"li")); list.add(new User(22,"wang")); list.add(new User(21,"zhang")); Collections.sort(list); // Collections.sort(list, new UserCmp()); for (int i = 0; i < list.size(); ++i) { System.out.println(list.get(i).getAge() + " " + list.get(i).getName()); } } } class User implements Comparable<Object> { int age; String name; User(int age, String name) { this.age = age; this.name = name; } @Override public int compareTo(Object o) { // TODO Auto-generated method stub return this.age - ((User)o).getAge(); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class UserCmp implements Comparator<Object> { @Override public int compare(Object o1, Object o2) { // TODO Auto-generated method stub return ((User)o2).getAge() - ((User)o1).getAge(); } }