A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cflying 中级黑马   /  2015-7-26 19:09  /  215 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


1:Map(掌握)
        (1)Map是一个键值对形式的集合。它的元素都是有键和值组成。

        (2)Map和Collection的区别?(面试题)
                A:Map 是由键值对组成的集合,Map的键(key)是唯一的,值(value)可以重复。
                B:Collection 是有单列数据组成的集合,它的儿子List是可以重复的,Set是唯一的。

        (3)HashMap和Hashtable的区别?(面试题)
                HashMap:线程不安全,效率高。允许null键和值。
                Hashtable:线程安全,效率低。不允许null键和值。

        (4)Map的功能:(自己补齐)
                A:添加功能

                   V put(K key, V value)        当key在集合中不存在时,添加元素;
                                                当key在集合中存在的时候,替换元素。
                B:判断功能
                       
                        boolean containsValue( Object value )        判断指定的值是否在集合中存在。
                        boolean isEmpty()        判断集合是否为空。

                C:删除功能
                        void clear()        清除所有键值对数据。
                        V remove( Object key )        根据指定的键删除键值对。

                D:获取功能
                        Set<Map.Entry<K,V>> entrySet()                键值对对象的集合。
                        Object get( Object key ):根据键获取值。
                        Set<K> keySet():所有键的集合
                        Collection<V> values()        所有值的集合。

       
                E:长度功能
                        int size()

        (5)Map的两种遍历方式(思路补齐)
                A:丈夫找妻子(掌握)
                        a:把所有丈夫给集合起来。Set<K> ketSet()
                        b:遍历丈夫集合,获取到每一个丈夫。增强for , 迭代器
                        c:让丈夫去找妻子。get(Object key)
                        // 创建集合对象
                        Map<String, String> map = new HashMap<String, String>();
                        // 往集合里边添加元素
                        map.put("郭靖", "黄蓉");
                        map.put("杨过", "小龙女");
                        map.put("牛郎", "侄女");
                        map.put("萧炎", "萧薰儿");
                        // 方式1 遍历,"丈夫找妻子"
                        // 得到所有的丈夫对象
                        Set<String> husbandSet = map.keySet();

                        // 用迭代器的方式来做
                        Iterator it = husbandSet.iterator();
                        while(it.hasNext())
                        {
                                String husband = (String)it.next();
                                String wife = map.get(husband);
                                System.out.println(husband +"-----"+ wife);
                        }
                        // 用增强for来做
                        for (String s : husbandSet) {
                                // 根据“丈夫”找到“妻子”--根据键获取值
                                String wife = map.get(s);
                                System.out.println(s + "******" + wife);
                        }

                B:根据结婚证找丈夫和妻子(理解,别人写你能看懂即可)
                         a:获取所有结婚证的集合。Set<> entrySet()
                         b:遍历结婚证集合,获取到每一个结婚证对象。迭代器,增强for
                         c:通过结婚证对象获取丈夫和妻子getKey()和getValue()

                         // 创建集合对象
                        Map<String, String> map = new HashMap<String, String>();
                        // 往集合里边添加元素
                        map.put("郭靖", "黄蓉");
                        map.put("杨过", "小龙女");
                        map.put("牛郎", "侄女");
                        map.put("萧炎", "萧薰儿");
                        // 找到所有的“结婚证”,也就是所有的键值对
                        Set<Map.Entry<String, String>> set = map.entrySet();
                        // 方式2 遍历,这样每次遍历我都会得到一个键值对
                        for (Map.Entry<String, String> en : set) {
                                // 得到键和值,然后打印
                                String key = en.getKey();
                                String value = en.getValue();
                                System.out.println(key + "****" + value);
                        }


2:HashMap(掌握)
        (1)HashMap存储字符串并遍历
                键:String
                值:String
        (2)HashMap存储自定义对象并遍历
                键:String
                值:Student

        (3)HashMap存储自定义对象并遍历
                键:Student(重写hashCode和equals方法,自动生成)
                值:String
                需求:如果对象的成员变量值都相同,我们则认为是同一个对象。

3:TreeMap(理解)
        (1)TreeMap存储字符串并遍历
                键:String
                值:String
        (2)TreeMap存储自定义对象并遍历
                键:String
                值:Student

        (3)TreeMap(传入一个比较器comparator)存储自定义对象并遍历
                键:Student
                值:String
                需求:如果对象的成员变量值都相同,我们则认为是同一个对象。
                      同时,我们还要按照年龄排序。

4:案例(理解)
        (1)统计字符串中每个字符出现的次数。
                //创建集合对象
                TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
                String str = "cbxzbvavdvgd";
                //将字符串转成字符数组
                char[] chs = str.toCharArray();
                //遍历字符数组
                for (char ch : chs) {
                        //将拿到的字符去集合中找对应的值,根据返回值进行相应的操作
                        Integer i = tm.get(ch);
                        if (i == null) {
                                tm.put(ch, 1);
                        } else {
                                i++;
                                tm.put(ch, i);
                        }
                }
                //将得到的键值对集合,根据转变成字符串,并将结果按照要求的格式打印出来
                //创建可变字符串对象
                StringBuilder sb = new StringBuilder();
                //得到集合中 所有的键 并遍历
                Set<Character> set = tm.keySet();
                for(char ch:set)
                {
                        //根据键找到对应的值,然后按照要求的格式拼接
                        Integer i = tm.get(ch);
                        sb.append(ch).append("(").append(i).append(")");
                }

                //将结果转成字符串,并输出
                String result = sb.toString();
                System.out.println(result);  
        (2)HashMap嵌套HashMap的使用。
                //创建集合对象--czbk
                HashMap<String,HashMap<String,String>> czbk = new HashMap<String,HashMap<String,String>>();
                //创建并添加元素对象 yr和jy
                HashMap<String,String> yr = new HashMap<String,String>();
                yr.put("01", "zhangsan");
                yr.put("02", "lisi");
                czbk.put("yr",yr );
                HashMap<String,String> jy = new HashMap<String,String>();
                jy.put("01", "wangwu");
                jy.put("02","zhaoliu");
                czbk.put("jy", jy);
                //遍历集合
                //创建集合对象--czbk
                HashMap<String,HashMap<String,String>> czbk = new HashMap<String,HashMap<String,String>>();
                //创建并添加元素对象 yr和jy
                HashMap<String,String> yr = new HashMap<String,String>();
                yr.put("01", "zhangsan");
                yr.put("02", "lisi");
                czbk.put("yr",yr );
                HashMap<String,String> jy = new HashMap<String,String>();
                jy.put("01", "wangwu");
                jy.put("02","zhaoliu");
                czbk.put("jy", jy);
                               
                //遍历集合
                //先拿到czbk集合中所有的键,并遍历
                Set<String> czbkKeys = czbk.keySet();
                for(String czbkKey :czbkKeys)
                {
                        //打印czbk集合中的键
                        System.out.println(czbkKey);
                        //在czbk集合中,根据键拿到对应的值,因为值也是一个键值对集合,所以我们在遍历一次
                        HashMap<String,String> hm=czbk.get(czbkKey);
                        //拿到(czbk的值集合)中的所有的键
                        Set<String> set = hm.keySet();
                        //遍历,根据键找到对应的值,并将结果输出
                        for(String s :set)
                        {
                                String value = hm.get(s);
                                System.out.println("\t"+s+"***"+value);
                        }                       
                }
        (3)HashMap嵌套ArrayList的使用。(掌握)

评分

参与人数 1黑马币 +4 收起 理由
平底斜 + 4 舍友友情帮顶

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马