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

发布于:2025-03-20 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、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)运行结果


网站公告

今日签到

点亮在社区的每一天
去签到