Lecture 18: Comparable / Graph: 4/22
DJW section 6.1
Defining comparison operators for your own classes.
Code to define the comparison operator on strings to be just a comparison
of their lengths.
Now any method that is defined to work over Comparables will work over
MyStrings, such as Comparables.sort
Note we have also redefined "hashCode", so any method that uses hashTables
will also work, though in this case "work" is a little odd.
Defining a method that works over Comparables
Code for an ordered list of some comparable type
But this will not work with extension MyStringX of MyString
You have to use instead
Conditions that have to be met.
Equals has to be an equivalence relation.
Then equals divides the objects in the class into equivalence
classes (different sense of class). If two object are in the same
equivalence class, they are equal. If they are in different equivalence classes
they are not equal.
- A.equals(A) is true. (Reflexive)
- If A.equals(B) then B.equals(B). (Symmetric)
- If A.equals(B) and B.equals(C) then A.equals(C)
compareTo has to be a total ordering compatable with equals
- A.compareTo(B) == 0 if and only if A.equals(B).
- If A.equals(B) then A.compareTo(C) == B.compareTo(C).
- A.compareTo(C) and C.compareTo(A) have opposite signs.
- If A.compareTo(B) < 0 and B.compareTo(C) < 0 then A.compareTo(C) < 0.
hashfun has to be compatable with equals.
- If A.equals(B) then A.hashfun() = B.hashfun();