黑马程序员技术交流社区
标题:
想知道你们都是怎么理解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