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
Drow
class holds aString
, but when you compare twoDrow
instances 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 Strings
Write the
Drow
class, including any instance variables, constructor, andcompareTo
method. -
EBO. The class
EBO
is likeInteger
except 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
Pt
contains an(x,y)
coordinate pair. The ordering ofPt
is 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
compareTo
method.