• 【Collections类】之欢乐斗地主底层逻辑分析及实现


    在这里插入图片描述


    在这里插入图片描述



    个人名片:

    🐼作者简介:一名大一在校生
    🐻‍❄️***个人主页:***小新爱学习.
    🐼***个人WeChat:hmmwx53***
    🕊️***系列专栏:***零基础学java ----- 重识c语言 ---- 计算机网络
    🐓***每日一句:***眉毛上的汗水和眉毛下的泪水,你必须选一样



    标题

    上期回顾:Collections类

    Collections的概述

    public class Collections
    extends Object

    是针对集合操作的工具类

    此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定 collection 支持的新 collection,以及少数其他内容。

    如果为此类的方法所提供的 collection 或类对象为 null,则这些方法都将抛出 NullPointerException。

    Collections类的常用方法

    方法说明
    static < T> booleanaddAll(Collection c, T… elements) 将所有指定元素添加到指定 collection 中。
    static < T> voidcopy(List dest, List src) 将所有元素从一个列表复制到另一个列表。
    static > voidsort(List< T> list) 根据元素的自然顺序 对指定列表按升序进行排序。
    static < T> voidsort(List< T> list, Comparator c) 根据指定比较器产生的顺序对指定列表进行排序。
    static voidreverse(List list) 反转指定列表中元素的顺序。
    static voidshuffle(List list) 使用默认随机源对指定列表进行置换。

    代码演示:

    package com.ithmm_02;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class CollectionsDemo01 {
        public static void main(String[] args) {
            //创建集合对象
            List<Integer> list = new ArrayList<Integer>();
    
            //添加元素
            list.add(122);
            list.add(2);
            list.add(88);
            list.add(4);
            list.add(72);
            list.add(60);
    
            //static  void
            // sort(List list, Comparator c)
            //          根据指定比较器产生的顺序对指定列表进行排序。
            //Collections.sort(list);//[2, 4, 60, 72, 88, 122]
    
            //static void reverse(List list)
            //          反转指定列表中元素的顺序。
            //Collections.reverse(list);//[60, 72, 4, 88, 2, 122]
    
            //static void shuffle(List list)
            //          使用默认随机源对指定列表进行置换。
            Collections.shuffle(list);//随机
    
    
            System.out.println(list);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    Demo:斗地主底层分析及实现

    在这里插入图片描述

    需求:通过程序实现斗地主过程中的洗牌,发牌和看牌,并对牌进行排序。
    在这里插入图片描述

    思路:

    1. 创建HashMap集合,键是编号,值对应的是牌
    2. 创建ArrayList集合,存储编号
    3. 创建花色数组和点数数组
    4. 从0开始往HashMap里面存储编号,并存储对应的牌。同时在ArrayList集合里面存储编号
    5. 洗牌(洗的是编号即“键”),用Collections的shuffle()方法实现
    6. 发牌(发的也是编号),为保证编号是排序的,创建TreeSet集合来接收
    7. 定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合中找对应的牌
    8. 调用看牌的方法

    这里会用到HashMap,TreeSet,Map集合的常用方法和相关知识,对这块陌生的小伙伴可以看看往期文章,传送门:HashSet集合TreeSet集合Map集合

    代码示例:

    package com.ithmm_02;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.TreeSet;
    
    /*
     1. 创建HashMap集合,键是编号,值对应的是牌
     2. 创建ArrayList集合,存储编号
     3. 创建花色数组和点数数组
     4. 从0开始往HashMap里面存储编号,并存储对应的牌。同时在ArrayList集合里面存储编号
     5. 洗牌(洗的是编号即“键”),用Collections的shuffle()方法实现
     6. 发牌(发的也是编号),为保证编号是排序的,创建TreeSet集合来接收
     7. 定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合中找对应的牌
     8. 调用看牌的方法
     */
    public class CollectionsDemo02 {
        public static void main(String[] args) {
            // 1. 创建HashMap集合,键是编号,值对应的是牌
            HashMap<Integer, String> hm = new HashMap<Integer, String>();
    
            //2. 创建ArrayList集合,存储编号
            ArrayList<Integer> array = new ArrayList<Integer>();
    
            // 3. 创建花色数组和点数数组
            String[] colors = {"♦","♣","♥","♠"};
            String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
    
            //4. 从0开始往HashMap里面存储编号,并存储对应的牌。同时在ArrayList集合里面存储编号
            int index = 0;
    
            for(String number : numbers) {
                for (String color : colors) {
                    hm.put(index, color + number);
                    array.add(index);
                    index++;
                }
            }
            hm.put(index,"小王");
            array.add(index);
            index++;
            hm.put(index,"大王");
            array.add(index);
    
            // 5. 洗牌(洗的是编号即“键”),用Collections的shuffle()方法实现
            Collections.shuffle(array);
    
            //6. 发牌(发的也是编号),为保证编号是排序的,创建TreeSet集合来接收
            TreeSet<Integer> player1 = new TreeSet<Integer>();//玩家1
            TreeSet<Integer> player2 = new TreeSet<Integer>();//玩家2
            TreeSet<Integer> player3 = new TreeSet<Integer>();//玩家3
            TreeSet<Integer> dipai = new TreeSet<Integer>();  //三张底牌
    
            for(int i = 0;i <array.size();i++){
                int x = array.get(i);
                if(i>array.size()-4){
                    dipai.add(x);
                }else if(i%3==0){
                    player1.add(x);
                }else if(i%3==1){
                    player2.add(x);
                }else if(i%3==2){
                    player3.add(x);
                }
            }
            //8. 调用看牌的方法
            lookPoker("player1",player1,hm);
            lookPoker("player2",player2,hm);
            lookPoker("player3",player3,hm);
            lookPoker("底牌",dipai,hm);
        }
    
        //7. 定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合中找对应的牌
        public static void lookPoker(String name, TreeSet<Integer> ts,HashMap<Integer,String> hm){
            System.out.println(name + " " + "的牌是: ");
            for(Integer key : ts){
                String poker = hm.get(key);
                System.out.print(poker+" ");
            }
            System.out.println();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84

    效果演示:

    在这里插入图片描述
    在这里插入图片描述


    在这里插入图片描述

    欢迎添加微信,加入我的核心小队,请备注来意

    👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

  • 相关阅读:
    Git的初步认识
    在云计算环境中,如何利用 AI 改进云计算系统和数据库系统性能
    例39:使用List控件
    Java注解-最通俗易懂的讲解
    网络安全(黑客技术)—2024自学手册
    KR万能公式
    Mysql数据库和SQL语句
    【Dubbo】入门搭建
    [工业自动化-6]:西门子S7-15xxx编程 - PLC系统硬件组成与架构
    EXCEL表格倒三角标志下拉选择的设置、取消限制方法
  • 原文地址:https://blog.csdn.net/m0_68089732/article/details/126580840