本文共 3520 字,大约阅读时间需要 11 分钟。
Comparable和Compator都是用于给集合排序的接口,但是他们之间的区别是什么呢。
compareTo
。比如我们想通过年龄给用户排序,那么我们的用户要实现Comparable接口的方法,假如一旦要通过用户的评分进行排序,我们就必须要修改compareTo方法。// o 是要比较的对象// 返回负数,小于要比较的对象// 返回 0 ,等于要比较的对象// 返回正数,大于要比较的对象public interface Comparable{ public int compareTo(T o);}
public interface Comparator{// 返回负数,第一个小于第二个的对象,o1 < o2// 返回 0 ,对象相等 o1 = o2// 返回正数,第一个大于第二个对象 o1 > o2 int compare(T o1, T o2); // 判断Compator之间是不是相同的 boolean equals(Object obj);}
public class User implements Comparable{ private Integer id; private Integer rank; private Integer age; private String name; //getter and setter public User(Integer rank, Integer age, String name) { this.rank = rank; this.age = age; this.name = name; } // 通过rank进行排序 @Override public int compareTo(User o) { return this.getRank() - o.getRank(); } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", rank=" + rank + ", age=" + age + '}'; }}
public class User implements Comparable{ private Integer id; private Integer rank; private Integer age; private String name; //getter and setter public User(Integer rank, Integer age, String name) { this.rank = rank; this.age = age; this.name = name; } // 通过rank进行排序 @Override public int compareTo(User o) { return this.getAge() - o.getAge(); } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", rank=" + rank + ", age=" + age + '}'; }}
public class App { public static void main(String[] args) { Listlist = new ArrayList (); list.add(new User("aihe",100,23)); list.add(new User("weidong",80,25)); list.add(new User("zhangbo",85,28)); list.add(new User("leizhen",90,29)); Collections.sort(list); System.out.println(list); }}
public class RankComparator implements Comparator{ // 通过rank进行排序 public int compare(User o1, User o2) { return o1.getRank() - o2.getRank(); }}
public class AgeComparator implements Comparator{ // 通过age进行排序 public int compare(User o1, User o2) { return o1.getAge() - o2.getAge(); }}
public class App { public static void main(String[] args) { Listlist = new ArrayList (); list.add(new User("aihe",100,23)); list.add(new User("weidong",80,25)); list.add(new User("zhangbo",85,28)); list.add(new User("leizhen",90,29)); Collections.sort(list,new RankComparator()); //Collections.sort(list,new AgeComparator()); System.out.println(list); }}
如果我们的排序方式一般不会变化,我们知道要排序什么字段,在创建对象的时候可以直接实现Comparable接口。
如果我们还不清楚要比较什么字段,那么可以等到后续确定的时候实现Comparator接口,Comparator接口是从外部进行排序,不会对对象产生影响。
转载地址:http://ciill.baihongyu.com/