区别:
comparator
接口实际上是出自java.util包,它有一个compare(Object obj1, Object obj2)
方法用来排序(比较器)
comparable
接口实际上是出自java.lang
包,它有一个compareTo(Object obj)
方法用来排序(排序接口)
Comparator定制排序:
compare方法中调用的是对象实现comparable接口重写的compareTo方法。
// void sort(List list),按自然排序的升序排序 Collections.sort(arrayList); // 定制排序的用法//降序 Collections.sort(arrayList, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2.compareTo(o1); } });
Comparable接口:
重写 compareTo 方法实现按年龄来排序:
// person对象没有实现Comparable接口,所以必须实现,这样才不会出错,才可以使treemap中的数据按顺序排列 // 前面一个例子的String类已经默认实现了Comparable接口,另外其他像Integer类等都已经实现了Comparable接口,所以不需要另外实现了 public class Person implements Comparable<Person> { private String name; private int age; public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } /** * T重写compareTo方法实现按年龄来排序 */ @Override public int compareTo(Person o) { if (this.age > o.getAge()) { return 1; } if (this.age < o.getAge()) { return -1; } return 0; } }
总结:
comparator
接口出自java.util包,是一个比较器,它有一个compare(Object o1, Object o2)
方法用来排序,compare方法中调用的是对象实现comparable接口重写的compareTo方法。
comparable排序
接口出自java.lang
包,它有一个compareTo(Object o)
方法用来排序,主要是对象实现comparable接口重写 compareTo 方法实现按某字段排序。