黑马程序员技术交流社区

标题: 谁有map集合的总结 [打印本页]

作者: wy123580    时间: 2016-5-24 01:06
标题: 谁有map集合的总结
谁有map集合的总结

作者: 聪明一只哈    时间: 2016-5-24 01:07
一,Map 集合
        体系:
                Map
                        --HashMap
                                --LinkedHashMap
                        --Hashtable
                        --TreeMap
        1.特点:
                Map 集合存储都是key-value键值对的形式,key不能重复
        2.Map 和 Collection 不同
                a. Map 存储的是键值对, Collection 存储的是单个元素
                b. Map 的key唯一(和value无关),Set 集合存储元素唯一
        3.Set 与 Map 的关系(了解)
                HashSet 底层 使用的是 HashMap ,
                HashSet 中存储的元素就是 相当于 HashMap 的key
                //当利用HashSet的add(元素)时,相当于HashMap的put(元素,new Object())
                底层哈希算法数据结构只与key有关

                TreeSet 底层 使用的是 TreeMap ,
                TreeSet 中存储的元素就是 相当于TreeMap 的key
                //当利用TreeSet的add(元素)时,相当于HashMap的put(元素,new Object())
                二叉树算法数据结构只与key有关
        4.Map 集合功能
                a:添加功能
                        V put(K key,V value):                                                                添加元素,可添加 null
                b:删除功能
                        void clear():                                                                                                移除所有的键值对元素
                        V remove(Object key):                                                        根据键删除键值对元素,并把值返回
                c:判断功能
                        boolean containsKey(Object key):                        判断集合是否包含指定的键
                        boolean containsValue(Object value):        判断集合是否包含指定的值
                        boolean isEmpty():                                                                        判断集合是否为空
                d:获取功能
                        Set<Map.Entry<K,V>> entrySet():                        获取'键值对'封装到 Entry 对象
                        V get(Object key):                                                                        根据键获取值
                        Set<K> keySet():                                                                                获取集合中所有键的集合
                        Collection<V> values():                                                        获取集合中所有值的集合
                e:长度功能
                        int size():                                                                                                        返回集合中的键值对的个数
        5.Map集合两种遍历方式的思路是什么?
                a.通过键遍历
                        1.获取keySet()并遍历
                        2.获取集合中每一个key值,然后调用get(key)方法获得对应的值
                        3.输出 key 和 value
                b.通过'键值对'对象遍历
                        1.获取entrySet()并遍历
                        2.获取集合中每一个'键值对'Entry对象
                        3.调用 entry.getKey() 和 entry.getValue() 输出.
        6.源码分析
                        在 HashMap 内部通过一个 Entry 内部类实现了 Map.Entry 接口
                        static class Entry<K,V> implements Map.Entry<K,V> {}
二,Map 集合的两个子类
        1.LinkedHashMap 的概述和使用
                特点: 同时拥有 Linked 和 HashMap 特点.
        2.TreeMap
                特点:
                        底层的二叉树数据结构只有key有关,存入 TreeMap 的时候会比较key
                        我们需要让key具有比较性(自然顺序)或者传一个比较器,完成比较
                        TreeSet 低层就是 TreeMap 实现的
        3.HashMap 和 Hashtable 有什么区别?
                a.Hashtable 是JDK1.0版本出现的,是线程安全的,效率低
                   HashMap 是JDK1.2版本出现的,是线程不安全的,效率高
                b.Hashtable 不可以存储null键和null值
                   HashMap 可以存储null键和null值
三,Collections 类
        1.方法
                public static <T> void sort(List<T> list)                                                                //排序
                public static <T> int binarySearch(List<?> list,T key)                //2分查找
                public static <T> T max(Collection<?> coll)                                                //最值
                public static void reverse(List<?> list)                                                                //反转
                public static void shuffle(List<?> list)                                                                        //乱序
        2.泛型通配符
               

               
                ? extends E                                ? 要么是E类型要么是E的子类型
                ? super E                                        ? 要么是E类型要么是E的父类型





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2