个人感觉没有什么区别,只是Comparable的compareTo方法为自然比较法,而Comparator要重写compare方法
Comparable
package com.example.demo;
/**
* @Author: 大鸡腿
* @Date: 2019/4/6 15:46
* @Version 1.0
*/
public class Test1 implements Comparable<Test1>{
String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public int compareTo(Test1 o) {
return this.id.compareTo(o.getId());
}
}
Comparator
package com.example.demo;
import java.util.Comparator;
/**
* @Author: 大鸡腿
* @Date: 2019/4/6 15:46
* @Version 1.0
*/
public class Test2 implements Comparator<Test2> {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public int compare(Test2 o1, Test2 o2) {
return o1.getId().compareTo(o2.getId());
}
}
package com.example.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @Author: 大鸡腿
* @Date: 2019/4/6 15:55
* @Version 1.0
*/
public class Test {
public static void main(String[] args) {
List<Test1> list1=new ArrayList<Test1>();
List<Test2> list2=new ArrayList<Test2>();
Test1 t1=new Test1();
Test1 t2=new Test1();
t1.setId("1");
t2.setId("2");
System.out.println(t1.compareTo(t2));
/*for(int i=0;i<15;i++){
int a= (int) (Math.random()*100);
//System.out.println(a);
Test1 t1=new Test1();
Test2 t2=new Test2();
t1.setId(String.valueOf(a));
t2.setId(String.valueOf(a));
list1.add(t1);
list2.add(t2);
}
Collections.sort(list1);
Collections.sort(list2,new Test2());
System.out.println("t1开始遍历");
for(Test1 t:list1){
System.out.println(t.getId());
}
System.out.println("t2开始遍历");
for(Test2 t:list2){
System.out.println(t.getId());
}*/
}
}
调用的时候,如果是实现了Comparable直接Collections.sort(list1)不用再添加后面的一个排序类的参数
而实现Comparator,需要再Collections.sort(list2,new Test2());