Java中利用Collections、HashMap、TreeSet混合使用Demo

来源:互联网 发布:今日方知我是我的诗句 编辑:程序博客网 时间:2024/06/16 07:41

这里写图片描述
代码:

package day18_Poker;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.TreeSet;/* * 模拟斗地主洗牌和发牌 *  * 分析: *      A:创建一个牌盒 *      B:装牌 *      C:洗牌 *      D:发牌 *      E:看牌 * 思路: *      A:创建一个HashMap集合 *      B:创建一个ArrayList集合 *      C:创建花色数组和点数数组 *      D:从0开始往HashMap里面存储编号,并存储对应的牌 *          同时从ArrayList里面存储编号即可 *      E:洗牌(洗的是编号) *      F:发牌(发的也是编号,为了保证编号是排序,就创建TreeSet集合接收) *      G:看牌(遍历TreeSet集合,获取编号,到HashMap集合照对应的牌) * */public class PokerDemo {    public static void main(String[] args) {        // TODO Auto-generated method stub        //创建HashMap集合        HashMap<Integer, String> hm = new HashMap<Integer,String>();        //创建一个ArrayList集合        ArrayList<Integer> array = new ArrayList<Integer>();        //创建花色数组和点数数组        String[] colors={"♠","♥","♣","♦"};        String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};        //从0开始往HashMap里面存储编号,并存储对应的牌        int index=0;        for(String number:numbers){            for(String color:colors){                String poker=color.concat(number);                //放入HashMap                hm.put(index, poker);//对应左侧HashMap图                array.add(index);//对应右侧Array图                index++;            }        }        //放大小王        hm.put(index, "小王");        array.add(index);        index++;//放入元素加1        hm.put(index, "大王");        array.add(index);        //洗牌(洗的是编号)        Collections.shuffle(array);        //F:发牌(发的也是编号,为了保证编号是排序,就创建TreeSet集合接收)        TreeSet<Integer> fengQingYang = new TreeSet<Integer>();        TreeSet<Integer> linQingXia = new TreeSet<Integer>();        TreeSet<Integer> liuYi = new TreeSet<Integer>();        TreeSet<Integer> diPai  = new TreeSet<Integer>();        //发牌        for(int i=0;i<array.size();i++){            if(i>=array.size()-3){                diPai.add(i);            }else if(i%3==0){                fengQingYang.add(i);            }else if(i%3==1){                linQingXia.add(i);            }else if(i%3==2){                liuYi.add(i);            }        }        //看牌(遍历TreeSet集合,获取编号,到HashMap集合照对应的牌)          lookPoker("风清扬", fengQingYang, hm);        lookPoker("林青霞", linQingXia, hm);        lookPoker("刘意", liuYi, hm);        lookPoker("底牌", diPai, hm);    }    public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer, String>hm){        System.out.println(name+"的牌是:");        for(Integer key:ts){            String value=hm.get(key);            System.out.print(value+" ");        }        System.out.println();    }   }

三者总结:

1.集合(自己补齐)    Collection(单列集合)            List(有序,可重复)                    ArrayList                        底层数据结构是数组,查询块,增删慢                        线程不安全,效率高                    Vector                        底层数据结构是数组,查询块,增删慢                        线程安全,效率低                    LinkedList                        底层数据结构是链表,查询慢,增删块                        线程不安全,效率高            Set(无序,不可重复)                    HashSet                        底层数据结构是哈希表                        哈希表依赖两个方法:hashCode()和equals()                        执行顺序:                            首先判断hashCode()值是否相同                                是:继续执行equals()方法,看其返回值                                    true:说明元素重复,不添加                                    false:就直接添加                                否:直接添加                        最终:                            自动生成hashCode()和equals()即可。alt+shift                        LinkedHashSet                            底层数据结构由链表和哈希表组成。                            有链表保证元素有序                            由哈希表保证唯一                    TreeSet                        底层数据结构是红黑树。(是一种自平衡的二叉树)                        如何保证元素唯一性?                            根据比较的返回值是否是0来决定                        如何保证元素的排序?                            自然排序(元素具备比较性)                                让元素所属的类实现Comparatable接口                            比较器排序(集合具备比较性)                                让集合接收一个Comparator的实现类对象    Map(双列集合)        Map集合的数据结构仅仅针对键有效,与值无关            A:Map集合的数据结构仅仅针对键有效,与值无关            B:存储的是键值对形式的元素,键唯一,值可以        HashMap            底层数据结构是哈希表                        哈希表依赖两个方法:hashCode()和equals()                        执行顺序:                            首先判断hashCode()值是否相同                                是:继续执行equals()方法,看其返回值                                    true:说明元素重复,不添加                                    false:就直接添加                                否:直接添加                        最终:                            自动生成hashCode()和equals()即可。alt+shift            LinkedHashMap                底层数据结构由链表和哈希表组成。                            有链表保证元素有序                            由哈希表保证唯一        Hashtable            底层数据结构是哈希表                        哈希表依赖两个方法:hashCode()和equals()                        执行顺序:                            首先判断hashCode()值是否相同                                是:继续执行equals()方法,看其返回值                                    true:说明元素重复,不添加                                    false:就直接添加                                否:直接添加                        最终:                            自动生成hashCode()和equals()即可。alt+shift        TreeMap            底层数据结构是红黑树。(是一种自平衡的二叉树)                        如何保证元素唯一性?                            根据比较的返回值是否是0来决定                        如何保证元素的排序?                            自然排序(元素具备比较性)                                让元素所属的类实现Comparatable接口                            比较器排序(集合具备比较性)                                让集合接收一个Comparator的实现类对象2:到底使用那种集合(自己补齐)    看需求:        是否是键值对形式:            是:  Map                键是否需要排序:                    是:TreeMap                    否:HashMap                不知道,就使用HashMap            否:Collection                元素是否唯一?                    是:Set                        元素是否需要排序                            是:TreeSet                            否:HashSet                        不知道,就使用HashSet                    否:List                        要安全吗?                            是:Vector(其实我们也不用,后面我们讲解了多线程以后,再回顾)                            否:ArrayList或者LinkedList                                增删多:LinkedList                                查询多:ArrayList                            不知道,就是用ArrayList                不知道,就使用ArrayList3:集合的常见方法及便利方式    Collection:        add()        remove()        contains()        iterator()        size()        遍历:            增强for            迭代器        |--List            get()            遍历:                普通for        |--Set    Map:        put()        remove()        containsKey(),containsValue()        keySet()        get()        value()        entrySet()        size()        遍历:            根据键找值            根据键值对对象分别找键和值
阅读全文
0 0
原创粉丝点击