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>
扫描二维码关注公众号,回复:
345699 查看本文章