使用HashMap,TreeSet,ArrayList模拟斗地主洗牌和发牌并对牌进行排序的代码实现

HashMap是一种集合,是Map的一种具体实现类。对外表现为采用键值(key-value)对的方式存储数据。

TreeSet特点是什么?

TreeSet是用于对元素进行排序的有序集合类,不允许有重复的元素
TreeSet也是不保证元素的顺序与插入的顺序一致,TreeSet是会对元素进行排序

TreeSet数据结构:二叉树
特点:元素是有大小顺序的

 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。

接下来用三个工具实现斗地主洗牌和发牌并对牌进行排序的代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

/**
 * 模拟斗地主洗牌和发牌,牌没有排序
 *
 */

public class PokerTest {
    public static void main(String[] args) {
        //1.组成一副扑克牌
        String[] num={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        String[] color={"方片♦","梅花♣","红桃♥","黑桃♠"};
        HashMap poker = new HashMap();
        ArrayList list = new ArrayList();
        int index=0;
        for(String s1:num){
            for(String s2:color){
                poker.put(index,s2.concat(s1)); //将索引和扑克牌添加到Hashmap中 concat连接两个数组
                list.add(index); //将索引放入ArrayList集合中
                index++;
            }
        }
        //添加大小王
        poker.put(index,"小王");
        list.add(index);
        index++;
        poker.put(index,"大王");
        list.add(index);
        //2.洗牌 shuffle()
        Collections.shuffle(list);
        //3.发牌
        //3.1创建3个角色和一个底牌对应的四个ArrayList
        TreeSet tom=new TreeSet();
        TreeSet jerry=new TreeSet();
        TreeSet me=new TreeSet();
        TreeSet lastCards=new TreeSet();
        for(int i=0;i<list.size();i++){
            if(i> list.size()-3){
                lastCards.add(list.get(i));
            }
            if(i%3==0){
                tom.add(list.get(i));
            }else if(i%3==1){
                jerry.add(list.get(i));
            }else if(i%3==2){
                me.add(list.get(i));
            }
        }
        //3.2 遍历显示四个ArrayList
        lookPoker("Tom",tom,poker);
        lookPoker("Jerry",jerry,poker);
        lookPoker("豆粉",me,poker);
        lookPoker("底牌",lastCards,poker);

    }
    public static void lookPoker(String name, TreeSet ts, HashMap map){
        System.out.println(name+"的牌是:");
        for(Object index:ts){
            System.out.println(map.get(index));
        }
    }
}

Tom的牌是:
红桃♥3
方片♦4
红桃♥4
梅花♣5
方片♦6
方片♦7
红桃♥7
方片♦8
方片♦9
梅花♣9
梅花♣10
梅花♣J
红桃♥J
方片♦Q
黑桃♠Q
方片♦K
梅花♣K
大王
Jerry的牌是:
梅花♣A
红桃♥A
黑桃♠A
方片♦2
梅花♣2
红桃♥2
方片♦3
梅花♣4
方片♦5
梅花♣6
红桃♥6
黑桃♠6
梅花♣7
黑桃♠7
梅花♣8
红桃♥8
方片♦J
梅花♣Q
豆粉的牌是:
方片♦A
黑桃♠2
梅花♣3
黑桃♠3
黑桃♠4
红桃♥5
黑桃♠5
黑桃♠8
红桃♥9
黑桃♠9
方片♦10
红桃♥10
黑桃♠10
黑桃♠J
红桃♥Q
红桃♥K
黑桃♠K
小王
底牌的牌是:
黑桃♠5
红桃♥8

可见TreeSet自动为牌的位置排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆粉今天敲了吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值