妖碧落

导航

HashMap TreeMap LinkedHashMap

HashMap 键是Student值 是String 的案例
  键是Student, 如果不重写,则键肯定不一致, 所以需要重写键对象的hashcode() equals()

LinkedHashMap 底层是链表,怎么存怎么取

TreeMap
  键如果是自定义对象,则该对象必须有比较的功能

public class demon7_hashmapHashMap {
    /*
     * 嵌套HashMap
     *  键是学生 值是学生归属地
     *  有多个班级  键是班级   值是班级号
     */
    public static void main(String[] args) {
        HashMap<Student, String> hm1 = new HashMap<>();
        hm1.put(new Student("张三",23), "北京");
        hm1.put(new Student("李四",24), "北京");
        hm1.put(new Student("王五",25), "上海");
        hm1.put(new Student("赵柳",26), "广州");
        //System.out.println(hm1);
        
        HashMap<Student, String> hm2 = new HashMap<>();
        hm2.put(new Student("唐僧",1023), "北京");
        hm2.put(new Student("悟空",1024), "北京");
        hm2.put(new Student("八戒",1025), "上海");
        hm2.put(new Student("沙僧",926), "广州");
        //System.out.println(hm2);
        
        HashMap<HashMap<Student, String>, Integer> grade = new HashMap<>();
        grade.put(hm1, 88);
        grade.put(hm2, 89);
        
        for (HashMap<Student, String> hm : grade.keySet()) {
            Integer value = grade.get(hm);
            for (Student s : hm.keySet()) {
                String addr = hm.get(s);
                
                System.out.println(s + "..." + addr + "..." + value);
            }
        }
    }

}

 

public class test1 {
    /*
     * 需求:统计字符串中每个字符出现的次数
     */
    public static void main(String[] args) {
        String str = "aaaabbbcccccccccc";
        char[] arr = str.toCharArray();                        
        HashMap<Character,Integer> hm = new HashMap<>();
        for (char c : arr) {
            /*if (!hm.containsKey(c)){
                hm.put(c, 1);
            }else {
                hm.put(c, hm.get(c)+1);
            }*/
            hm.put(c, !hm.containsKey(c)? 1 : hm.get(c)+1 );
        }
        for (Character key : hm.keySet()) {
            System.out.println(key + " = " + hm.get(key));
        }
        System.out.println(hm.get('a'));
    }

}

 

public class test2_dizhu2 {

    public static void main(String[] args) {
        String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        String[] color = {"红","黑","梅","花"};
        
        HashMap<Integer, String> hm = new HashMap<>();   //存贮索引和牌
        
        ArrayList<Integer> list = new ArrayList<>();  // 存索引
        int index= 0 ;
        for (String s1 : color) {
            for (String s2 : num) {
                hm.put(index, s1.concat(s2));
                list.add(index);
                index++;
            }
        }
        hm.put(index, "小王");
        list.add(index);
        index++;
        hm.put(index, "大王");
        list.add(index);
        Collections.shuffle(list);     //随机打乱顺序,相当于洗牌
        
        TreeSet<Integer> gaojin = new TreeSet<>();
        TreeSet<Integer> longwu = new TreeSet<>();
        TreeSet<Integer> me = new TreeSet<>();
        TreeSet<Integer> dipai= new TreeSet<>();
        for (int i = 0; i < list.size(); i++) {    //发牌  存 牌的索引
            if (i>=list.size()-3) {
                dipai.add(list.get(i));
            } else if (i%3==0) {
                gaojin.add(list.get(i));
            }else if (i%3==1) {
                longwu.add(list.get(i));
            }else {
                me.add(list.get(i));
            }
        }    
        lookPoker(hm, gaojin, "高进");
        lookPoker(hm, longwu, "龙武");
        lookPoker(hm, me, "xxx");
        lookPoker(hm, dipai, "底牌");
    }
    //看牌的参数列表:  hashMap
    public static void lookPoker(HashMap<Integer, String> hm, TreeSet<Integer> ts, String name) {
        System.out.print(name + "的牌是:");
        for (Integer i : ts) { //  ts代表双列集合的键的集合
            System.out.print(hm.get(i)+ " ");
        }
        System.out.println();
    }

}

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class test3 {

    /**
     * * A:案例演示
     * 模拟斗地主洗牌和发牌并对牌进行排序的代码实现
     * 
     *  分析:
     * 1,买一副扑克,其实就是自己创建一个集合对象,将扑克牌存储进去
     * 2,洗牌
     * 3,发牌
     * 4,看牌
     */
    public static void main(String[] args) {
        //1,买一副扑克,其实就是自己创建一个集合对象,将扑克牌存储进去
        String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        String[] color = {"红桃","黑桃","方片","梅花"};
        HashMap<Integer, String> hm = new HashMap<>();                    //存储索引和扑克牌
        ArrayList<Integer> list = new ArrayList<>();                    //存储索引
        int index = 0;
        
        //拼接扑克牌并索引和扑克牌存储在hm中
        for(String s1 : num) {                                            //获取数字
            for(String s2 : color) {                                    //获取颜色
                hm.put(index, s2.concat(s1));
                list.add(index);                                        //将索引0到51添加到list集合中
                index++;
            }
        }
        //将小王添加到双列集合中
        hm.put(index, "小王");
        list.add(index);                                                //将52索引添加到集合中
        index++;
        hm.put(index, "大王");
        list.add(index);                                                //将53索引添加到集合中
        
        //2,洗牌
        Collections.shuffle(list);
        //3,发牌
        TreeSet<Integer> gaojin = new TreeSet<>();
        TreeSet<Integer> longwu = new TreeSet<>();
        TreeSet<Integer> me = new TreeSet<>();
        TreeSet<Integer> dipai = new TreeSet<>();
        
        for(int i = 0; i < list.size(); i++) {
            if(i >= list.size() - 3) {
                dipai.add(list.get(i));                            //将三张底牌存储在底牌集合中
            }else if(i % 3 == 0) {
                gaojin.add(list.get(i));
            }else if(i % 3 == 1) {
                longwu.add(list.get(i));
            }else {
                me.add(list.get(i));
            }
        }
        
        //看牌
        lookPoker(hm, gaojin, "高进");
        lookPoker(hm, longwu, "龙五");
        lookPoker(hm, me, "xxx");
        lookPoker(hm, dipai, "底牌");
    }
    /*
     * 看牌
     * 1,返回值类型void
     * 2,参数列表HashMap,TreeSet,String name
     */
    public static void lookPoker(HashMap<Integer, String> hm,TreeSet<Integer> ts ,String name) {
        System.out.print(name + "的牌是:");
        for(Integer i : ts) {                        //i代表双列集合中的每一个键
            System.out.print(hm.get(i) + " ");
        }
        System.out.println();
    }
}

 

posted on 2019-08-05 23:26  妖碧落  阅读(153)  评论(0编辑  收藏  举报