Re: Help with Deck of cards assignment and getting it to deal...
On 8/3/2014 3:26 PM, Arne Vajh?j wrote:
I must admit that I can not follow you.
The fact that different games may use a different ordering is
not an argument against Comparable<>.
Comparable<> is not the one and only ordering. Comparable<> is
just the natural ordering. It is perfectly valid to have a
Comparable<> with the natural ordering and a bunch of
Comparator<> to handle the context specific orderings.
Although one could select different Comparators for different
games -- one for Ace-low, say, and another for Ace-high -- there
is no way a Comparator could work for "Ace-either" games like Poker
(and certainly not for "Ace-both" games like high-low Poker!). Like
Comparable, Comparator reflects a _total ordering_ on the objects it
compares, and a total ordering must be transitive:
If X < Y and Y < Z then X < Z, for all X,Y,Z.
In Poker, one can have
Ace < Five and Five < Ten but Ten < Ace
.... violating transitivity, so the ranks do not follow a total order.
One could, of course, implement a Comparator (or a Comparable)
that broke the rules and violated its "contractual obligation" to
impose a total order. But a Comparable/Comparator that didn't behave
as it should would make mockery of the claim
> Your Card class will be more easily used if it implement the
> java.lang.Comparable<T> interface
.... because none of the Comparable- or Comparator-based utility
classes and methods would behave properly: Collections.sort(),
Arrays.binarySearch(), SortedMap(), ... Something that simply
doesn't work cannot be "more easily used."