黑马程序员技术交流社区

标题: 想知道你们都是怎么理解map集合,还有map集合的遍历问题? [打印本页]

作者: wunaihaoye    时间: 2015-11-24 23:27
标题: 想知道你们都是怎么理解map集合,还有map集合的遍历问题?
怎么理解map集合?map集合的遍历又是怎么实现的?本人这一块比较晕,求大神详细解答。
作者: hansnowqiang    时间: 2015-11-25 23:30
本帖最后由 hansnowqiang 于 2015-11-28 21:45 编辑

我也是初学者刚刚看完了Map这块,这次写个总结和自己的理解希望能够有些帮助,同时也加深一下自己的印象:
Map集合:是由一系列的键值对组成的集合。键唯一,值可重复。
我们可以回想一下比较好理解的数组。数组是由java给定了键你只需要向里面填入值就可以了,而Map这需要你自己给定键。
例如:我可以定义一个String[] name ,将”唐伯虎“这个字符串放到里面那么 name[0]就能够得到”唐伯虎“。
同理。我们   Map<Integer,String>name = new Map<Integer,String>()
                      name.put(9527,”唐伯虎“)这样我们想得到”唐伯虎“时。(当然键和值都必须是引用类型,这里没加”“因为自动拆装箱)
                      String n = name.get(9527);      就可以了
Map下分为:HashMap、Hashtable、(此处不符合命名规则,这个是从JDK1.0就存在了,牵涉太多没办法修改了)TreeMap.
Map集合的数据结构仅仅针对键有效,与值无关。
HashMap:底层数据结构是哈希表。线程不安全,效率高。
                       以hashCode()和equals()方法保证元素唯一性。在比较自定义对象是需要重写自定义对象的hashCode()和equals()方法eclipse自动生成即可。
Hashtable:  底层数据结构是哈希表。线程安全,效率低.

                        其他与HashMap相同。
TreeMap:底层数据结构是红黑树。(是一种自平衡的二叉树) ,键是有序的。
                 键的有序是有两种形式的,一种是键所属于的类型本身就具有可比较排序的特性(即元素具有比较性),比如Integer本身就有compareTo方法。
                                                         另一种是我们为集合定义一个比较器Comparator(即集合具有比较性),针对键的值给出比较方法。
                  比较过程:>0放右边,<0放左边,=0剔除出去不要(保证键的唯一性)。
遍历:通过键获取值
                Set<String> set = map.keySet();//通过keyset()方法返回一个键的Set集合
                for (String key : set) {   //使用增强for获取每一个set集合中的键
                        String value = map.get(key);  //获取键对应的值
                        System.out.println(key + "---" + value);
                }

          获取键值对对象分别获得键和值:
                Set<Map.Entry<String, String>> set1 = map.entrySet();    //Set<Map.Entry<K,V>> entrySet() 这个方法可以理解为返回了一个键和值成对的Set集合
                for(Map.Entry<String, String> me:set1){               //这个键值对的元素类型为Map.Entry<String, String>  
                        String key = me.getKey();                                //Map.Entry<K,V>接口下有获取键和值得方法
                        String value  = me.getValue();
                        System.out.println(key+"---"+value);
                }


作者: anuo    时间: 2015-11-28 16:02
存储键值对的一个集合,可以通过键找到对应的值。
作者: xinxiangchen    时间: 2015-11-28 16:14
Collection 是单列的,Map是成对的
遍历时Collection 直接迭代,Map可以选择遍历键(唯一),或者遍历键值关系
作者: yuhongzhen    时间: 2015-11-28 17:20
Map是双列集合,是单列集合的延伸,只要掌握使用方法就行了,过于准求理解,会比较容易遇阻,影响学习进程。




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