0. Java集合框架

1. 集合体系图

image

单列集合

fabe2a381afda6d3d9b68b376b431745

双列集合

186a4454599aaa0e639035d1d67dc6f3

2. List集合的特点和应用

3. 泛型

4. Collections工具类的使用

5. Set集合

6. Map集合

案例:模拟斗地主发牌

edd839a3b643beda78f79c03029fb2a8
f576c88e326298c1e32d622f9d370b4d
6baa8d7febee53ac389b3cf9b8a9c92d

代码示例

package com.baidu.www;

import java.util.*;

public class SendPokerTest {
    public static void main(String[] args) {
        // 1. 买牌
        // 1.1 定义一个双列集合,键:表示牌的编号
        //                   值:表示具体的牌   规则:编号越小,牌越小
        Map<Integer, String> pokers = new HashMap<>();
        // 1.2 定义一个单列集合,用来存储所有牌的编号
        List<Integer> list = new ArrayList<>();
        // 1.3 具体的买牌操作
        // 普通牌
        String[] colors = {"♠", "♥","♣", "♦"};
        String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        int num = 0; // 牌的编号
        // 循环嵌套,造普通牌
        for (String number : numbers) {
            for (String color : colors) {
                String poker = color + number;
                // 将牌的编号和值放入双列集合
                pokers.put(num, poker);
                // 将牌的编号放入单列集合
                list.add(num++);
                // 编号自增
            }
        }

        // 大小王
        // 添加小王
        pokers.put(num, "小王");
        list.add(num++);
        // 添加大王
        pokers.put(num, "大王");
        list.add(num);

        // 打印牌
        System.out.println("牌:" + pokers);
        System.out.println("牌的编号:" + list);

        // 2. 洗牌
        Collections.shuffle(list);
        System.out.println("洗牌:" + list);

        // 3. 发牌
        // 3.1 定义4个集合,分别表示3个玩家和底牌。
        List<Integer> liuyifei = new ArrayList<>();
        List<Integer> zhaoliying = new ArrayList<>();
        List<Integer> shuashua = new ArrayList<>();
        List<Integer> dipai = new ArrayList<>();
        // 3.2 具体的发牌动作,将索引和3取模,决定发给谁。
        for (int i = 0; i < list.size(); i++) {
            // 获取编号
            Integer pokerNum = list.get(i);
            if(i >= list.size() - 3)
                // 底牌
                dipai.add(pokerNum);
            else if(i % 3 == 0)
                liuyifei.add(pokerNum);
            else if(i % 3 == 1)
                zhaoliying.add(pokerNum);
            else
                shuashua.add(pokerNum);
        }
        // 3.3 查看玩家,底牌的编号。
//        System.out.println("第一副牌:"+liuyifei);
//        System.out.println("第二副牌:"+zhaoliying);
//        System.out.println("第三副牌:"+shuashua);
//        System.out.println("底牌:"  + dipai);

        // 4. 看牌
        System.out.println("第一副牌:"+printPoker(liuyifei, pokers));
        System.out.println("第二副牌:"+printPoker(zhaoliying, pokers));
        System.out.println("第三副牌:"+printPoker(shuashua, pokers));
        System.out.println("底牌:"  + printPoker(dipai, pokers));
    }

    // 定义看牌方法
    // 方法名:printPoker
    // 参数列表:list<Integer>, Map<Integer, String>
    // 返回值:String
    public static String printPoker(List<Integer> nums, Map<Integer, String> pokers){
//        1. 对牌的编号进行升序排列
        Collections.sort(nums);
//        2. 遍历牌的编号集合,获取到每一个编号
        StringBuilder sb = new StringBuilder();
        for (Integer num : nums) {
//            3. 根据编号在双列集合中查找牌
            sb.append(pokers.get(num) + " ");
        }
//        4. 将获取到的牌进行拼接
//        5. 将结果进行返回
        String str = sb.toString();
        return str.trim();
    }
}

855b003d7c754a674b16c319a9b23cd9

3d57d9c3692ad58ae147303082d0723c

posted @ 2025-08-13 10:09  无敌美少女战士  阅读(10)  评论(0)    收藏  举报