JavalangComparable接口中唯一的方法是compareTo()在該方法中可以進行簡單的相等比較以及執行順序比較接口實現框架如下[java] view plaincopyprint?
public class ComparableImpl implements Comparable<ComparableImpl> {
@Override public int compareTo(ComparableImpl o) { // TODO Autogenerated method stub return }
}一個類實現了Comparable接口則說明它的實例具有內在的排序關系就可以跟多種泛型算法以及依賴於該接口的集合實現進行協作依賴於比較關系的類包括有序集合類TreeSet和TreeMap以及工具類Collections和Arrays若一個數組中的元素實現了Comparable接口則可以直接使用Arrays類的sort方法對這個數組進行排序Java平台庫中的所有值類(value classes)都實現了Comparable接口
Comparable的規范說明如下將當前這個對象與指定對象進行順序比較當該對象小於等於或大於指定對象時分別返回一個負整數零或者正整數如果由於指定對象的類型而使得無法進行比較則拋出ClassCastException異常
compareTo方法的實現必須滿足如下幾個限制條件自反性對稱性傳遞性和非空性
一般來說comparaTo方法的相等測試應該返回與equals方法相同的結果如果相同則由compareTo方法施加的順序關系被稱為與equals一致如果不同則順序關系被稱為與equals不一致如果一個類的compareTo方法與equals方法的順序關系不一致那麼它仍然能正常工作只是如果一個有序集合包含了該類的實例則這個集合可能無法遵循某些集合接口的通用約定因為集合接口的通用約定是按照equals方法定義的而有序集合使用了由compareTo施加的相等測試下面是實現了Comparable接口的類同時該類還重寫了equals和hashCode等方法[java] view plaincopyprint?
public abstract class ZLTextPosition implements Comparable<ZLTextPosition> {
public abstract int getParagraphIndex()public abstract int getElementIndex()public abstract int getCharIndex()
public boolean samePositionAs(ZLTextPosition position) { return getParagraphIndex() == positiongetParagraphIndex() && getElementIndex() == positiongetElementIndex() && getCharIndex() == positiongetCharIndex()}
@Override public int compareTo(ZLTextPosition position) { final int p = getParagraphIndex()final int p = positiongetParagraphIndex()if (p != p) { return p < p ? }
final int e = getElementIndex()final int e = positiongetElementIndex()if (e != e) { return e < e ? }
final int c = getCharIndex()final int c = positiongetCharIndex()if (c != c) { return c < c ? } return }
@Override public boolean equals(Object obj) { if (this == obj) { return true} if (!(obj instanceof ZLTextPosition)) { return false}
final ZLTextPosition position = (ZLTextPosition)objreturn samePositionAs(position)}
@Override public int hashCode() { return (getParagraphIndex() << ) + (getElementIndex() << ) + getCharIndex()}
@Override public String toString() { return getClass()getName() + + getParagraphIndex() + + getElementIndex() + + getCharIndex()}
}
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26372.html