java中Comparable接口
所有可以排序的类,都实现了java.lang.Comparable接口。
Comparable中只有一个方法:
int conpareTo(T o)
返回0,表示this == obj
返回正数,表示this > obj
返回负数,表示this < obj
BasicContainer2.java
import java.util.*;
public class BasicContainer2 {
public static void main(String[] args) {
List l1 = new LinkedList();
l1.add(new Name("Karl","M"));
l1.add(new Name("Steven","Lee"));
l1.add(new Name("John","O"));
l1.add(new Name("Tom","M"));
System.out.println(l1);//[Karl M, Steven Lee, John O, Tom M]
//调用sort方法排序
//排序之前必须重写compaerTo比较大小,否则无效
Collections.sort(l1);
System.out.println(l1);//[Steven Lee, Karl M, Tom M, John O]
}
}
//实现Comparable接口
class Name implements Comparable {
private String firstName,lastName;
public Name(String firstName, String lastName) {
this.firstName = firstName; this.lastName = lastName;
}
public String getFirstName() { return firstName; }
public String getLastName() { return lastName; }
public String toString() { return firstName + " " + lastName; }
public boolean equals(Object obj) {
if (obj instanceof Name) {
Name name = (Name) obj;
return (firstName.equals(name.firstName))
&& (lastName.equals(name.lastName));
}
return super.equals(obj);
}
public int hashCode() {
return firstName.hashCode();
}
//改写Comparable的compareTo方法
public int compareTo(Object o) {
Name n = (Name)o;
//调用String类的compareTo方法,比较大小
int lastCmp = lastName.compareTo(n.lastName);
//lastCmp,首先按照姓(lastName)排列,然后按照名(fisrtName)排列
return (lastCmp!=0 ? lastCmp : firstName.compareTo(n.firstName));
}
}
F:\java>javac BasicContainer2.java
注: BasicContainer2.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
F:\java>java BasicContainer2
[Karl M, Steven Lee, John O, Tom M]
[Steven Lee, Karl M, Tom M, John O]
F:\java>