Java--集合进阶

一、Coollrction的其他相关知识

目录

一、Coollrction的其他相关知识

1、前置知识 :可变参数 :

2、Collections

3、综合案例


1、前置知识 :可变参数 :

可变参数

就是一种特殊形参 ,定义在方法 、构造器的形参列表里 ,格式是 数据类型...参数名称;

可变参数的特点和好处 :

a.特点 :可以不传数据给它;可以传一个或者同时传多个数据给它 ;也可以传一个数组给它。

b.好处 :常常用来灵活的接收数据。

可变参数的注意事项 :

1、可变参数在方法内部就是一个数组。

2、一个形参列表可变参数只能有一个

3、可变参数必须放在形参列表的最后面

2、Collections :

Collections : 是一个用来操作集合的工具类

Collection提供的常用静态方法 :

Collections只能支持List集合进行排序 :

排序方式1 :

                    注意:本方法可以直接对自定义类型的List集合排序 ,但自定义类型必须实现了Comparable接口 ,指定了比较规则才可以。

                               

     排序方式2 :            

  3、综合案例

案例 :斗地主游戏 :

分析业务需求 :

1 、总共有54张牌

2、点数 :: "3","4","5","6","7","8","9","10","J","Q","K","A","2"

3、花色 :"♠" ,"♥", ,"♦" ,"♣"

4、大小王: "👲" , "🃏“

5、斗地主:发出51张牌,剩下3张为底牌。

分析实现:

a、在启动游戏房间的时候,应该提前准备好54张牌

b 、接着,需要完成洗牌、发牌、对牌排序、看牌

           代码实现 :                           

package com.itheima.d3_collection_test;

public class Card {
    private String color; // 花色
    private String number; // 点数

    public Card() {
    }

    public Card(String color, String number) {
        this.color = color;
        this.number = number;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return number + color;
    }
}

   

package com.itheima.d3_collection_test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 房间类。
 */
public class Room {
    private List<Card> allCards = new ArrayList<>(); // []
    // 实例代码块:每次创建对象的时候会自动执行一次。
    {
        // 1、初始化54张牌。
        // 拿到全部点数:个数确定,类型确定,建议使用数组存储
        String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        // 拿到全部花色:个数确定,类型确定,建议使用数组存储
        String[] colors = { "♠", "♥", "♣", "♦"};

        // 2、遍历点数,再遍历花色,创建牌对象封装他们。
        for (String number : numbers) {
            for (String color : colors) {
                // 创建一个牌对象,封装这张牌的数据
                Card card = new Card(color, number);
                allCards.add(card);
            }
        }
        // 3、单独添加大小王
        Card c1 = new Card("🃏", "");
        Card c2 = new Card("👲", "");
        Collections.addAll(allCards, c1, c2);
        System.out.println("新牌是:" + allCards);
    }

    public void start() {
        // 4、洗牌
        Collections.shuffle(allCards);
        System.out.println("洗牌后:" + allCards);

        // 5、发牌:准备三个玩家,依次发出去51张牌,剩余三种作为底牌。
        List<Card> linghuChong = new ArrayList<>();
        List<Card> jiumozhi = new ArrayList<>();
        List<Card> renyingying = new ArrayList<>();

        // allCards =  [J♠, Q♥, A♠, 3♥, 6♣, 3♣, J♣, 2♦, 10♦, 2♠ ...
        //              0    1   2   3   4   5   6   7    8    9    %  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);
            }
        }

        // 拓展:获取最后三种底牌。
        List<Card> lastThreeCards = allCards.subList(allCards.size() - 3, allCards.size());

        // 拓展:对玩家的牌进行排序(自己做,我再讲)

        // 6、看牌。
        System.out.println("阿冲:" + linghuChong);
        System.out.println("阿鸠:" + jiumozhi);
        renyingying.addAll(lastThreeCards); // 抢地主了!
        System.out.println("阿盈:" + renyingying);
        System.out.println("底牌:" + lastThreeCards);
    }
}

           

package com.itheima.d3_collection_test;

public class Test {
    public static void main(String[] args) {
//        目标:完成斗地主案例的实现。
//        分析业务需求
//        总共有54张牌
//        点数: "3","4","5","6","7","8","9","10","J","Q","K","A","2“
//        花色: "♠", "♥", "♣", "♦“
//        大小王: "👲" , "🃏“
//        斗地主:发出51张牌,剩下3张做为底牌。
//        实现:做牌,洗牌,发牌,看牌(排序)

        // 1、每3个玩家需要一个房间对象。
        Room r = new Room();
        // 2、每次启动房间对象的时候,需要准备一副牌。
        // 3、每张牌是一个牌对象。
        r.start();

    }
}

                                   

本节到此结束!!!

尽请期待下章!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值