前段时间用到了Comparable,是把json串转换为list后排序,后来又写了一个通用方法来调用,然后就用到了Comparator,这里记一下两者的区别使用。
- 1 Comparable 看了些资料,有人把Comparable归为内比较,本人比较赞同,可以看下下面的例子,然后再与Comparator的例子比较一下体会一下。 这里以date排序为例。
public class Person implements Comparable<Person> {
private int id;
private String name;
private String date;
public Person(int id, String name, String date) {
this.id = id;
this.name = name;
this.date = date;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
@Override
public int compareTo(Person o) {
return this.date.compareTo(o.date);
}
}
public static void main(String[] args) {
Person p1= new Person(1,"xiaobai","2017-9-2");
Person p2 = new Person(4,"zhangsan","2018-5-9");
Person p3 = new Person(2,"jack","2018-10-18");
List<Person> list = new LinkedList<>();
list.add(p1);
list.add(p2);
list.add(p3);
//正序排列
// Collections.sort(list);
//倒序排列
Collections.reverse(list);
for(int i=0;i<3;i++){
System.out.println(list.get(i).getDate());
}
}
执行结果为
2018-10-18
2018-5-9
2017-9-2
- 2 Comparator Comparator相对上面的Comparable可以用在外比较上。如上面的结果用Comparator实现,运行一下下面的代码,体会一下。
public class Person2 {
private int id;
private String date;
public Person2(int id, String date) {
this.id = id;
this.date = date;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
public static void main(String[] args) {
Person2 p1= new Person2(1,"2017-09-2");
Person2 p2 = new Person2(4,"2018-05-9");
Person2 p3 = new Person2(2,"2018-10-18");
List<Person2> list = new LinkedList<>();
list.add(p1);
list.add(p2);
list.add(p3);
Collections.sort(list, new Comparator<Person2>() {
@Override
public int compare(Person2 o1, Person2 o2) {
//正序排列
return o1.getDate().compareTo(o2.getDate());
//倒序排列
// return o2.getDate().compareTo(o1.getDate());
}
});
for(int i=0;i<3;i++){
System.out.println(list.get(i).getDate());
}
}
运行结果和Comparable是一样的。