一、Coollrction的其他相关知识
目录
可变参数 :
就是一种特殊形参 ,定义在方法 、构造器的形参列表里 ,格式是 :数据类型...参数名称;
可变参数的特点和好处 :
a.特点 :可以不传数据给它;可以传一个或者同时传多个数据给它 ;也可以传一个数组给它。
b.好处 :常常用来灵活的接收数据。
可变参数的注意事项 :
1、可变参数在方法内部就是一个数组。
2、一个形参列表可变参数只能有一个
3、可变参数必须放在形参列表的最后面
Collections : 是一个用来操作集合的工具类
Collection提供的常用静态方法 :
Collections只能支持List集合进行排序 :
排序方式1 :
注意:本方法可以直接对自定义类型的List集合排序 ,但自定义类型必须实现了Comparable接口 ,指定了比较规则才可以。
排序方式2 :
案例 :斗地主游戏 :
分析业务需求 :
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();
}
}
本节到此结束!!!
尽请期待下章!!!