14. Comparable
Comparable means that two items in a class can be compared (less than,
equal to, greater than). It is similar to the Ord typeclass in Haskell.
Comparable is an interface. You implement it. It is a template, so
you put the class you are able to compare to in angle brackets
afterwards. I expect this to be the same class as the one that is
implementing the Comparable interface.
public class Whatever implements Comparable<Thing> {
public int compareTo (Thing other) {
// ...
}
}
The compareTo function gives an integer that indicates whether
this is greater than other.
- negative means
this < other. This could be read “this comes before other”. - zero means
this = other - positive means
this > other
| a | b | a.compareTo(b) | meaning | inquality |
|---|---|---|---|---|
| 10 | 20 | -10 | a is before b | < |
| 30 | 17 | 13 | a is after b | > |
| 20 | 20 | 0 | a is the same as b | = |
| “can” | “ask” | 2 | a is after b | > |
| “dang” | “ghost” | -3 | a is before b | < |
| “bo” | “boat” | -1 | a is before b | < |
| “same” | “same” | 0 | a is the same as b | = |
note
TheComparable interface does not require any particular number be returned from the compareTo function. Any positive result indicates that the left (this) argument is greater than the right (other) argument.
Exercises
-
The
Drowclass holds aString, but when you compare twoDrowinstances you get the opposite answer from comparing two strings. Example:Drow a = new Drow("cat"); Drow b = new Drow("dog"); int cmp = a.compareTo(b); // cmp is positive, but would be negative for StringsWrite the
Drowclass, including any instance variables, constructor, andcompareTomethod. -
EBO. The class
EBOis likeIntegerexcept all evens appear before any odd number in the ordering created bycompareTo.Examples:
a b a.compareTo(b) a interpretation b 2 4 -2 is before 9 3 6 is after 2 9 -7 is before 2 -3 -1 (any neg) is before 3 8 +1 (any pos) is after 5 10 +1 (any pos) is after The constructor is of the form
new EBO(7). -
The class
Ptcontains an(x,y)coordinate pair. The ordering ofPtis given by first comparing the x’s and then, if they are equal, comparing the y’s.Examples:
a b a.compareTo(b) a interpretation b (20,50) (20,80) -30 is before (10,5) (10,2) 3 is after (10,30) (31,19) -21 is before Write a class header, instance variables, constructor, and
compareTomethod.