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

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.kler.cn/a/592268.html

相关文章:

  • 13 - linux 内存子系统
  • redis主从架构和集群---java
  • 【sql靶场】第18-22关-htpp头部注入保姆级教程
  • ELK+Filebeat+Kafka+Zookeeper安装部署
  • 第3章:Docker架构详解:从守护进程到镜像仓库
  • (二)Reactor核心-前置知识1
  • 《心理学与生活》2025最新网课答案
  • puppeteer网络爬虫 “网络爬虫”
  • 【k8s003】k8s与docker的依赖关系
  • 【资源损坏类故障】:详细了解坏块
  • 【从零开始学习计算机科学与技术】计算机网络(三)数据链路层
  • jmeter吞吐量控制器-Throughput Controller
  • 每月更新,提供qiime2兼容库:Mitohelper助力鱼类线粒体序列分析
  • PostgreSQL 14.17 安装 pgvector 扩展
  • Lambda 表达式的语法:
  • 高频SQL 50 题(持续更新)
  • 企业年度经营计划制定与管理方法论(124页PPT)(文末有下载方式)
  • Java:读取中文,read方法
  • WebAssembly 技术在逆向爬虫中的应用研究
  • 网络安全漏洞与修复 网络安全软件漏洞