当前位置: 首页 > 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)运行结果

相关文章:

  • 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语言程序设计 第三章
  • 全总联合六部门印发工作指引,共保劳动者合法权益
  • 沧州盐碱地“逆天改命”:无用之地变良田,候鸟翔集水草丰美
  • 河南发布高温橙警:郑州、洛阳等地最高气温将达40℃以上
  • 2025吉林市马拉松开跑,用赛道绘制“博物馆之城”动感地图
  • 上海位居全球40城科技传播能力第六名
  • 东航C919航线上新!正式投入上海虹桥—深圳航线运营