》HashMap 的key底层数据结构是哈希表
》ArrayList 底层数据结构是数组,查询快,增删慢
》TreeSet 底层数据结构式红黑树(平衡二叉树),默认构造器采用自然排序(Integer已经实现了Comparable接口 )。
package cn.itcast.day18; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.TreeSet; /* * 斗地主 发牌程序 * * A:创建HashMap<Integer,String>用于存放装牌号和牌。 * B: 创建花色数组,创建点数数组(3最小) * B:创建ArrayList用于存放牌号 * C: 把牌号和牌放到对应的HashMap中,同时把牌号放到ArrayList中 * C:洗牌(洗牌号) * D: 发牌,遍历ArrayList中的牌号,去HashMap中招对应的牌,用TreeSet存放牌. * E: 遍历每一个TreeSet得到对应人的牌 */ public class PokerDemo { public static void main(String[] args) { //创建牌核 HashMap<Integer,String> hm=new HashMap<Integer,String>(); //创建牌号盒 ArrayList<Integer> array=new ArrayList<Integer>(); //创建花色数组 String[] colors={"♢","♧","♠","♥"}; //创建点数数组 String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"}; //把牌号和牌存入HashMap,把牌号存入ArrayList中 int index=0; for(String number:numbers){ for(String color:colors){ String s=color.concat(number); hm.put(index,s); array.add(index); index++; } } hm.put(index, "大王"); array.add(index); index++; hm.put(index, "小王"); array.add(index); //洗牌 Collections.shuffle(array); //发牌时用TreeSet存放 TreeSet<Integer> sunWuKong=new TreeSet<Integer>(); TreeSet<Integer> zhuBaJie=new TreeSet<Integer>(); TreeSet<Integer> shaHeShang=new TreeSet<Integer>(); TreeSet<Integer> diPai=new TreeSet<Integer>(); //遍历洗过的牌号集合ArrayList,并发牌号 for(Integer i:array){ if(array.size()-i<=3){ diPai.add(i); }else if(i%3==2){ sunWuKong.add(i); }else if(i%3==1){ zhuBaJie.add(i); }else if(i%3==0){ shaHeShang.add(i); } } lookPoker("孙悟空",sunWuKong,hm); lookPoker("猪八戒",zhuBaJie,hm); lookPoker("沙和尚",shaHeShang,hm); lookPoker("底牌",diPai,hm); } public static void lookPoker(String name,TreeSet<Integer> pai,HashMap<Integer,String> hm){ System.out.print(name+"的牌是 :"); for(Integer i:pai){ System.out.print(hm.get(i)+" "); } System.out.println(); } }
/*
孙悟空的牌是 :♠3 ♧4 ♢5 ♥5 ♠6 ♧7 ♢8 ♥8 ♠9 ♧10 ♢J ♥J ♠Q ♧K ♢A ♥A ♠2
猪八戒的牌是 :♧3 ♢4 ♥4 ♠5 ♧6 ♢7 ♥7 ♠8 ♧9 ♢10 ♥10 ♠J ♧Q ♢K ♥K ♠A ♧2
沙和尚的牌是 :♢3 ♥3 ♠4 ♧5 ♢6 ♥6 ♠7 ♧8 ♢9 ♥9 ♠10 ♧J ♢Q ♥Q ♠K ♧A ♢2
底牌的牌是 :♥2 大王 小王
*/