当前位置: 首页 > news >正文

Collection系列集合的小结+集合并发修改异常问题

一、Collection系列集合的小结

二、补充知识:集合的并发修改异常问题

三、Collection的其他相关知识

1. 前置知识:可变参数

2. 集合的工具类:Collections

3. 综合案例:斗地主游戏

(1)创建Card类

public class Card {
    private String number;
    private String color;
    private int size;

    public Card() {
    }

    public Card(String number, String color, int size) {
        this.number = number;
        this.color = color;
        this.size = size;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    @Override
    public String toString() {
        return color + number;
    }
}

(2)创建房间类Room

public class Room {
    private List<Card> allCards = new ArrayList<>();
    public Room(){
        String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        String[] colors = {"♠","♥","♦","♣",};
        int size = 0;
        for (String number : numbers) {
            size ++ ;
            for (String color : colors) {
                Card c = new Card(number, color, size);
                allCards.add(c);
            }
        }

        Card c1 = new Card("","🃏",++size);
        Card c2 = new Card("","🤡", ++size);
        Collections.addAll(allCards, c1, c2);
        System.out.println("新牌"+allCards);
    }

    public void start() {
        //1. 洗牌:allCards
        Collections.shuffle(allCards);
        System.out.println("洗牌后"+allCards);

        //2. 发牌:定义三个玩家。
        List<Card> LingHuchong = new ArrayList<>();
        List<Card> JiuMozhi = new ArrayList<>();
        List<Card> RenYingying = new ArrayList<>();
        //正式发牌给三个玩家,每次发出51张牌,剩余3张牌作为底牌
        for (int i = 0; i < allCards.size() - 3; i++) {
            Card c = allCards.get(i);
            if(i % 3 == 0){
                LingHuchong.add(c);
            }else if(i % 3 == 1){
                JiuMozhi.add(c);
            }else if(i % 3 == 2){
                RenYingying.add(c);
            }
        }
        //3. 对3个玩家的牌进行排序
        sortCards(LingHuchong);
        sortCards(JiuMozhi);
        sortCards(RenYingying);
        //4. 看牌
        System.out.println("阿冲:"+LingHuchong);
        System.out.println("阿鸠:"+JiuMozhi);
        System.out.println("盈盈:"+ RenYingying);
        List<Card> LastThreeCards = allCards.subList(allCards.size()-3, allCards.size());
        System.out.println("底牌:" + LastThreeCards);

        //抢到地主的展示
        JiuMozhi.addAll(LastThreeCards);
        sortCards(JiuMozhi);//抢到地主之后的牌进行排序
        System.out.println("阿鸠抢到地主后:"+JiuMozhi);


    }

    private void sortCards(List<Card> cards) {
        Collections.sort(cards, new Comparator<Card>() {
            @Override
            public int compare(Card o1, Card o2) {
                return o1.getSize() - o2.getSize();// 升序排序
                return  o2.getSize() - o1.getSize();//降序排序
            }
        });
    }
}

(3)创建游戏测试类 GameDemo

public class GameDemo {
    public static void main(String[] args) {
        Room m = new Room();
        m.start();
    }
}

(4)运行结果

http://www.dtcms.com/a/77658.html

相关文章:

  • storeToRefs
  • 【C#】合理使用DeepSeek相关AI应用为我们提供强有力的开发工具,在.net core 6.0框架下使用JsonNode动态解析json字符串,如何正确使用单问号和双问号做好空值处理
  • 基于分类算法的学习失败预警(下)
  • 函数的介绍
  • 降低时间复杂度---特殊方程的正整数解(双指针)
  • java八股文之常见的集合
  • DeepSeek 模型的成本效益深度解析:低成本、高性能的AI新选择
  • 深入理解【双指针】:从基础概念到实际例题
  • 【实测】单卡跑满血版DeepSeek|CSGHub集成KTransformers
  • 算法——广度优先搜索——跨步迷宫
  • Spark大数据分析与实战笔记(第四章 Spark SQL结构化数据文件处理-01)
  • Java 并发集合:ConcurrentHashMap 深入解析
  • 「C++输入输出」笔记
  • 上取整,下取整,四舍五入
  • IC/ID卡的卡号的不同格式的转换
  • created在vue3 script setup中的写法
  • redis搭建一主一从+keepalived(虚拟IP)实现高可用
  • 【8】分块学习笔记
  • 修改War包文件
  • PTA C语言程序设计 第三章
  • linux Redhat9.5采用DNS主从实现跨网段解析
  • 批量删除 PPT 中的所有图片、某张指定图片或者所有二维码图片
  • 【Java】——方法的使用(从入门到进阶)
  • deepseek使用记录99——为何追问
  • nginx 配置ip黑白名单
  • Docker 内部通信(网络)
  • 基于MySQL的创建<resultMap>和查询条件<if test>
  • zookeepernacoskafka之间的联系
  • Linux系统上后门程序的原理细节,请仔细解释一下
  • 【GeeRPC】项目总结:使用 Golang 实现 RPC 框架