0. Java集合框架
1. 集合体系图
单列集合
双列集合
2. List集合的特点和应用
3. 泛型
4. Collections工具类的使用
5. Set集合
6. Map集合
案例:模拟斗地主发牌
代码示例
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();
}
}