Java学习第十七天

来源:互联网 发布:vb.net dock 顺序 编辑:程序博客网 时间:2024/05/17 22:54

一、Map集合概述和特点

Map接口概述    查看API可以知道:        将键映射到值的对象        一个映射不能包含重复的键        每个键最多只能映射到一个值Map接口和Collection接口的不同    Map是双列的,Collection是单列的    Map的键唯一,Collection的子体系Set是唯一的    Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效

二、Map集合的功能概述

Map集合的功能概述    添加功能        V put(K key,V value):添加元素。            如果键是第一次存储,就直接存储元素,返回null            如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值    删除功能        void clear():移除所有的键值对元素        V remove(Object key):根据键删除键值对元素,并把值返回    判断功能        boolean containsKey(Object key):判断集合是否包含指定的键        boolean containsValue(Object value):判断集合是否包含指定的值        boolean isEmpty():判断集合是否为空    获取功能        Set<Map.Entry<K,V>> entrySet():        V get(Object key):根据键获取值        Set<K> keySet():获取集合中所有键的集合        Collection<V> values():获取集合中所有值的集合    长度功能        int size():返回集合中的键值对的个数

三、Map集合的遍历之键找值

    键找值思路:    获取所有键的集合    遍历键的集合,获取到每一个键    根据键找值案例演示    Map集合的遍历之键找值        HashMap<String, Integer> hm = new HashMap<>();        hm.put("张三", 23);        hm.put("李四", 24);        hm.put("王五", 25);        hm.put("赵六", 26);        /*Set<String> keySet = hm.keySet();         //获取集合中所有的键        Iterator<String> it = keySet.iterator();    //获取迭代器        while(it.hasNext()) {                       //判断单列集合中是否有元素            String key = it.next();                 //获取集合中的每一个元素,其实就是双列集合中的键            Integer value = hm.get(key);            //根据键获取值            System.out.println(key + "=" + value);  //打印键值对        }*/        for(String key : hm.keySet()) {             //增强for循环迭代双列集合第一种方式            System.out.println(key + "=" + hm.get(key));        }

四、Map集合的遍历之键值对对象找键和值

    键值对对象找键和值思路:    获取所有键值对对象的集合    遍历键值对对象的集合,获取到每一个键值对对象    根据键值对对象找键和值案例演示    Map集合的遍历之键值对对象找键和值        HashMap<String, Integer> hm = new HashMap<>();        hm.put("张三", 23);        hm.put("李四", 24);        hm.put("王五", 25);        hm.put("赵六", 26);        /*Set<Map.Entry<String, Integer>> entrySet = hm.entrySet(); //获取所有的键值对象的集合        Iterator<Entry<String, Integer>> it = entrySet.iterator();//获取迭代器        while(it.hasNext()) {            Entry<String, Integer> en = it.next();              //获取键值对对象            String key = en.getKey();                               //根据键值对对象获取键            Integer value = en.getValue();                          //根据键值对对象获取值            System.out.println(key + "=" + value);        }*/        for(Entry<String,Integer> en : hm.entrySet()) {            System.out.println(en.getKey() + "=" + en.getValue());        }

五、统计字符串中每个字符出现的次数

    案例演示    需求:统计字符串中每个字符出现的次数        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);                               //就将键和值为1添加            }else {                                         //如果包含这个键                hm.put(c, hm.get(c) + 1);                   //就将键和值再加1添加进来            }            //hm.put(c, !hm.containsKey(c) ? 1 : hm.get(c) + 1);            Integer i = !hm.containsKey(c) ? hm.put(c, 1) : hm.put(c, hm.get(c) + 1);                    }        for (Character key : hm.keySet()) {                 //遍历双列集合            System.out.println(key + "=" + hm.get(key));        }

六、HashMap和Hashtable的区别

    面试题    HashMap和Hashtable的区别        Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高        Hashtable不可以存储null键和null值,HashMap可以存储null键和null值

八、Collections工具类的概述和常见方法讲解
Collections类概述
针对集合操作 的工具类
Collections成员方法

    public static <T> void sort(List<T> list)    public static <T> int binarySearch(List<?> list,T key)    public static <T> T max(Collection<?> coll)    public static void reverse(List<?> list)    public static void shuffle(List<?> list)

八、模拟斗地主洗牌和发牌

    案例演示    模拟斗地主洗牌和发牌,牌没有排序        //买一副扑克        String[] num = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};        String[] color = {"方片","梅花","红桃","黑桃"};        ArrayList<String> poker = new ArrayList<>();        for(String s1 : color) {            for(String s2 : num) {                poker.add(s1.concat(s2));            }        }        poker.add("小王");        poker.add("大王");        //洗牌        Collections.shuffle(poker);        //发牌        ArrayList<String> gaojin = new ArrayList<>();        ArrayList<String> longwu = new ArrayList<>();        ArrayList<String> me = new ArrayList<>();        ArrayList<String> dipai = new ArrayList<>();        for(int i = 0; i < poker.size(); i++) {            if(i >= poker.size() - 3) {                dipai.add(poker.get(i));            }else if(i % 3 == 0) {                gaojin.add(poker.get(i));            }else if(i % 3 == 1) {                longwu.add(poker.get(i));            }else {                me.add(poker.get(i));            }        }        //看牌        System.out.println(gaojin);        System.out.println(longwu);        System.out.println(me);        System.out.println(dipai);

十、模拟斗地主洗牌和发牌并对牌进行排序的代码实现

    案例演示    模拟斗地主洗牌和发牌并对牌进行排序的代码实现        //买一副牌        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 : num) {            for(String s2 : color) {                hm.put(index, s2.concat(s1));                   //将索引和扑克牌添加到HashMap中                list.add(index);                                //将索引添加到ArrayList集合中                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));                         //将list集合中的索引添加到TreeSet集合中会自动排序            }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("高进", gaojin, hm);        lookPoker("龙五", longwu, hm);        lookPoker("冯佳", me, hm);        lookPoker("底牌", dipai, hm);    }    public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer, String> hm) {        System.out.print(name + "的牌是:");        for (Integer index : ts) {            System.out.print(hm.get(index) + " ");        }        System.out.println();    }
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子花钱玩游戏怎么办 mykung充不了电怎么办 脑出血恢复期身体软怎么办 腿里面有积水怎么办 手臂伤筋了怎么办 想打羽毛球没人怎么办 对看书没有兴趣怎么办 痴呆老人晚上闹怎么办 高中毕业证没拿怎么办 高考志愿同分怎么办 儿童吃虾过敏怎么办 滑板湿水了怎么办 老员工不听指挥怎么办 手机显示连接itunes怎么办 苹果手机下载不信任怎么办 暗影格斗3进不去怎么办 喝酒第二天头痛怎么办 加油忘记拔枪怎么办 刷机完成后怎么办 苹果8按键音太小怎么办 电脑蓝屏出英文怎么办 win10蓝屏重启怎么办 苹果手机变蓝屏怎么办 nga账号声望不足怎么办 鬃狮蜥胆小咬人怎么办 小狗拉稀脱水了怎么办 泰迪刚到家老叫怎么办 开车遇到拉死人怎么办 斯诺克解不到球怎么办 颈椎和腰椎不好怎么办 车祸肇事者不赔偿怎么办 交强险自赔吃亏怎么办 交通事故保险不结案怎么办 马蚁借呗超出一天还款怎么办 千里追风油太辣怎么办 蛀牙牙肉肿痛怎么办 转转删除的东西怎么办 专票开给了个人怎么办 手机用户密码忘了怎么办 手机用户密码忘记了怎么办 悦借钱账户锁定怎么办