就是比较对象的大小,可以看一下<<Effective Java》
public int compareTo(Object object) {
if (this == object) {
return 0;
}
if (object != null && object instanceof User) {
if (userID > ((User) object).getUserID()) return 1;
if (userID == ((User) object).getUserID())
return 0;
else
return -1;
} else
return 1;
}
public int compareTo(Object object) {
if (this == object) {
return 0;
}
if (object != null && object instanceof User) {
if (userID > ((User) object).getUserID()) return 1;
if (userID == ((User) object).getUserID())
return 0;
else
return -1;
} else
return 1;
}
解决方案 »
- socket编程 现在都用nio了么
- 急!求助!Hibernate中遇到Could not synchronize database state with session问题
- byte 16进制
- 向各位高手请教一个关于LIST求和的问题,谢谢了
- DepartmentException 在API找不到
- 一段继承的老代码了,菜鸟求教!
- 请教一个问题
- 用Graphics的drawLine画线或圆,怎么设置线宽?
- 一简单问题!高分回报!谢谢!我想定时访问数据库,看有没有新用户加入。
- 求大牛帮忙解决个Excel相关POI问题,求求求
- 请问jb有没有想Mirosoft的listview一样的控件
- 关于<<thinking in Java>>(V2.0)中的Inner class的疑问
如果你只是要为可比较的元素的列表进行排序,或为它们创建排序的对象集, 则这就是你实际需要了解的全部有关 Comparable 接口的内容。如果你要实现你自己的 Comparable 类型,则下一节将会引起你的兴趣。
Comparable 接口由一个单一的方法构成: public interface Comparable {public int compareTo(Object o);}
compareTo 方法将接收对象与特定对象进行比较,并在接收对象小于、等于或大于特定对象时分别返回负整数、空或一个正整数。如果特定对象不能与接收对象相比较,该方法扔出一个ClassCastException. 这是一个表示某人姓名的类(a class representing a person's name), 它实现了 Comparable:
import java.util.*;public class Name implements Comparable {private String firstName, lastName;public Name(String firstName, String lastName) {if (firstName==null || lastName==null)throw new NullPointerException();this.firstName = firstName;this.lastName = lastName;}public String firstName() {return firstName;}public String lastName() {return lastName;}public boolean equals(Object o) {if (!(o instanceof Name))return false;Name n = (Name)o;return n.firstName.equals(firstName) &&n.lastName.equals(lastName);}public int hashCode() {return 31*firstName.hashCode() + lastName.hashCode();}public String toString() {return firstName + " " + lastName;}public int compareTo(Object o) {Name n = (Name)o;int lastCmp = lastName.compareTo(n.lastName);return (lastCmp!=0 ? lastCmp :firstName.compareTo(n.firstName));}}
请看 compareTo 是如何被实现的,因为它是相当典型的。首先,你将 Object 参数转换为适当类型; 如果参数类型是不适当的,则会扔出一个适当的异常(ClassCastException);那么你应该比较对象的最重要部分(在此案例中为 last name)。通常,你可以使用该部分的类型的自然排序。 在次案例中,该部分是一个 String, 并且自然的(按词典顺序的)排序正是所要求的。如果比较的结果是空(它表示等同性)之外的其它东西,你就做完了:你可以返回结果。 如果最重要的部分是相等的,你就应该继续比较次重要部分。在此案例中,只有两个部分 (first name and last name)。 如果有更多的部分,你就应该以显而易见的方式继续进行,直到发现两个不相等的部分(否则你就应该比较最不重要的部分),这时,你就可以返回比较结果了。 这是 一个建立 Name 对象列表并对它们进行排序的小程序:
import java.util.*;class NameSort {public static void main(String args[]) {Name n[] = {new Name("John", "Lennon"),new Name("Karl", "Marx"),new Name("Groucho", "Marx"),new Name("Oscar", "Grouch")};List l = Arrays.asList(n);Collections.sort(l);System.out.println(l);}}