利用Collections工具类的排序操作可以写个斗地主游戏。当然这个简易版斗地主只是实现了洗牌、发牌功能。

public class ShowHand {
    // 支持玩家数
    private final int PLAY_NUM = 3;
    private String[] types = { "方块", "草花", "红心", "黑桃" };
    private String[] values = { "2", "3", "4", "5", "6", "7", "8", "9", "10",
            "J", "Q", "K", "A" };
    // 每局游戏中桌上剩下的牌,其数量不确定,且增删频繁,用LinkedList存储
    private List<String> cards = new LinkedList<String>();
    private String[] players = new String[PLAY_NUM];
    // 玩家手中的牌
    private List<String>[] playersCards = new List[PLAY_NUM];

    /**
     * 初始化扑克牌,放入52张扑克牌 并且洗牌(随机排序)
     */
    public void initCards() {
        for (int i = 0; i < types.length; i++) {
            for (int j = 0; j < values.length; j++) {
                cards.add(types[i] + values[j]);
            }
        }
        Collections.shuffle(cards);
    }

    /**
     * 初始化玩家,分配姓名
     */
    public void initPlayers(String... names) {
        if (names.length > PLAY_NUM || names.length < 2) {
            System.out.println("玩家数不对");
            return;
        } else {
            for (int i = 0; i < names.length; i++) {
                players[i] = names[i];
            }
        }
    }

    /**
     * 初始化玩家手中扑克牌:每个玩家开始时手中扑克牌数量为null 程序使用长度为0的LinkedList表示
     */
    public void initPlayerCards() {
        for (int i = 0; i < players.length; i++) {
            if (players[i] != null && !players[i].equals("")) {
                playersCards[i] = new LinkedList<String>();
            }
        }
    }

    /**
     * 用于测试,输出全部桌上未派出扑克牌
     */
    public void showAllCards() {
        for (String card : cards) {
            System.out.println(card);
        }
    }

    /**
     * 派扑克牌
     * 
     * @param first
     *            最先派给谁
     */
    public void deliverCard(String first) {
        // first元素在数组中的下标
        int firstPos = ArrayUtils.indexOf(players, first) - 1;
        for (int i = firstPos; i < PLAY_NUM; i++) {
            if (players[i] != null) {
                playersCards[i].add(cards.get(0));
                cards.remove(0);
            }
        }
        for (int i = 0; i < firstPos; i++) {
            if (players[i] != null) {
                playersCards[i].add(cards.get(0));
                cards.remove(0);
            }
        }
    }

    /**
     * 输出玩家手上的扑克牌 
     */
    public void showPlayerCards() {
        for (int i = 0; i < PLAY_NUM; i++) {
            if (players[i] != null) {
                System.out.println(players[i] + ":");
                for (String card : playersCards[i]) {
                    System.out.print(card + "\t");
                }
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        ShowHand sh = new ShowHand();
        sh.initPlayers("小白", "小黄", "小黑");
        sh.initCards();
        sh.initPlayerCards();
        sh.showAllCards();
        System.out.println("----------");
        sh.deliverCard("小黄");
        sh.showPlayerCards();
        sh.deliverCard("小黑");
        sh.showPlayerCards();
    }
}