Код был бы намного чище, если бы вы использовали enum для представления ранга и набора вместо символа.
На самом деле, http://jcp.org/aboutJava/communityprocess/jsr/tiger/enum.html имеет образец карты, иллюстрирующий использование Enum
Соответствующий бит кода скопирован ниже
public class Card implements Comparable, java.io.Serializable {
public enum Rank { deuce, three, four, five, six, seven, eight, nine, ten,
jack, queen, king, ace }
public enum Suit { clubs, diamonds, hearts, spades }
private final Rank rank;
private final Suit suit;
private Card(Rank rank, Suit suit) {
if (rank == null || suit == null)
throw new NullPointerException(rank + ", " + suit);
this.rank = rank;
this.suit = suit;
}
public Rank rank() { return rank; }
public Suit suit() { return suit; }
public String toString() { return rank + " of " + suit; }
public int compareTo(Object o) {
Card c = (Card)o;
int rankCompare = rank.compareTo(c.rank);
return rankCompare != 0 ? rankCompare : suit.compareTo(c.suit);
}
private static List<Card> sortedDeck = new ArrayList<Card>(52);
static {
for (Iterator<Rank> i = Rank.VALUES.iterator(); i.hasNext(); ) {
Rank rank = i.next();
for (Iterator<Suit> j = Suit.VALUES.iterator(); j.hasNext(); )
sortedDeck.add(new Card(rank, j.next()));
}
}
// Returns a shuffled deck
public static List<Card> newDeck() {
List<Card> result = new ArrayList<Card>(sortedDeck);
Collections.shuffle(result);
return result;
}
}