所有可以排序的类都实现了java.lang.Comparable接口,Comparable接口只有一个方法:
public int comparaTo(Object obj):
- 返回0,表示this == obj;
- 返回正数,表示this > obj;
- 返回负数,表示this < obj
实现了Comparable接口的类通过实现了comparaTo方法从而确定该类对象的排序方式。
示例,定义一个Name类,要求可以对其根据名字进行比较大小和排序。在调用Collections对象的sort(Object o)方法时,会默认调用Comparable接口的compareTo()方法进行大小比较,因此我们自定义的Name类需要重写compareTo()方法:
package javastudy;
import java.lang.Comparable;
import java.util.*;
public class Name implements Comparable{
String firstName;
String lastName;
Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public int compareTo(Object obj) {
Name name = (Name) obj;
if(this.firstName.compareTo(name.firstName) == 0) {
return this.lastName.compareTo(name.lastName);
} else {
return this.firstName.compareTo(name.firstName);
}
}
public String toString() {
return this.firstName + "." + this.lastName;
}
public static void main(String[] args) {
List list = new ArrayList();
Name name1 = new Name("Lily", "Li");
Name name2 = new Name("Jessica", "Su");
Name name3 = new Name("Jessica", "Wan");
Name name4 = new Name("Jack", "Liu");
Name name5 = new Name("Tom", "Xu");
Name name6 = new Name("Kumara", "Wen");
Name name7 = new Name("Jessica", "Li");
list.add(name1);
list.add(name2);
list.add(name3);
list.add(name4);
list.add(name5);
list.add(name6);
list.add(name7);
Collections.sort(list);
System.out.println(list);
}
}
Output: [Jack.Liu, Jessica.Li, Jessica.Su, Jessica.Wan, Kumara.Wen, Lily.Li, Tom.Xu]