黑马程序员_集合(Map)
来源:互联网 发布:java 敏感词检测 编辑:程序博客网 时间:2024/04/29 11:40
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Map
一、Map集合
Map集合:该集合存储键值对(键值对,就是存在映射关系两个对象,比如A指向B,C指向D,知道A就知道B,知道C就知道D),一对一对往里存,而且要保证键的唯一性。
Map集合的结构,看图:
二、Map集合的共性方法
1、 添加
V put ( K key , V value)
void putAll(Map<? extends K , ? extend V>, m)
2、 删除
void clear()
V remove(Object key)
3、 判断
boolean containsValue(Object value)
boolean containsKey(Object key)
boolean isEmpty()
4、 获取
V get(Object key)
int size()
Collection<V> values()
注意两个重要方法:entrySet()和keySet()
基于上面共有的方法,看一个注意的点,先看程序: map.put("01","zhangsan01"); map.put("01","zhangsan04");
map的put方法会返回一个value值。看上面程序,当我们添加第一个键值对的时候,会返回null,当添加第二键值对后,会返回zhangsan01。通过这个现象,我可以得出,添加元素,如果添加时,出现相同的键,那么后添加的值会覆盖原有键对应的值,并用返回被覆盖的值。
三、Map集合的取出方式
方式一:使用keySet方法
keySet方法可以将Map集合中所有的键存入到Set集合中。因为Set集合具有迭代器,所有可以迭代方式取出所有的键,在根据get方法,获取每一个键对应的值。
看示例:
Map<String,String> map =new HashMap<String,String>(); map.put("01","zhangsan01"); map.put("01","zhangsan04"); System.out.println("containsKey:"+map.containsKey("02")); System.out.println("remove:"+map.remove("02"));
Set<String>key = map.keySet();
Iteratorit = key.iterator();
while(it.hasNext()) {
String key = it.next();
String value = key.get(key);}
方式二:使用entrySet
entrySet方法的放回类型是Set<Map.Entry<K,V>。这个方式是将map集合中的映射关系存入到set集合中,而这个关系的数据类型就是:Map.Entry。
看一个示例程序:
Set<Map.Entry<String,String>>entrySet = map.entrySet();
Iterator<Map.Entry<String,String>>it = key.iterator();
while(it.hasNext()){
Map.Entry<String,String>entry= it.next();
String key = entry.getKey();
String value = entry.getValue();}
这里,在Map.Entry中,有getKey和getValue方法,用这两个方法就可以取出key和value。
对Map.Entry<K,V>的理解:
首先,entrySet方法是将Map集合中的映射关系取出来了,把这个映射关系视为一个整体,而这个关系就是Map.Entry。每一个映射关系,就是Map.Entry的实例对象。形象的来说,key就是丈夫,value就是妻子,映射关系就是结婚证,结婚证就是Map.Entry类型。
其次,程序上来说,Map.Entry其实也是一个接口,它是Map接口中的一个内部接口:
interface Map{
public staticInterface Entry{
}
}
最后,子类实现接口:
class HashMap implements Map{
class Hahs implements Map.Entry{
}
}
那么为什么它是Map中的接口呢,因为Map.Entry代表一种关系,就是说,只有建立的Map的对象,这种关系才会有,所有这就是内部规则,这就符合了之前学习的内部类定义规则。
四、Map的拓展
关于Map的拓展,简单来说就是嵌套。实际例子中,我们用的是一对一,比如String类型对Integer类型,这样的比较好理解,但实际中,好多都是一对一个整体,比如一个学校会对应多个学院,而每个学院里不同学科对应有不同的学生。在程序上来说,就是String类型变量,对应一个Map集合,而这两个整体关系时一个大的Map集合。
TreeMap<String,HashMap<String,Integer>>tm=newTreeMap<String,HashMap<String,Integer>>();
看这个程序,在TreeMap集合中,key是对应String类型,而value对应的是一个HashMap,
HashMap中又有键值对,这就是嵌套。
总结:
1、 Map集合也是集合中的一种,存储的也是对象。但存储的和Collection集合不同的是,它存储的是键值对,就是以一个键对应一个值,以这种映射关系存储的。而且要保证键的唯一性。
2、 注意Map集合,添加元素是用put方法,这个方法返回的是value。添加元素,如果添加时,出现相同的键,那么后添加的值会覆盖原有键对应的值,并用返回被覆盖的值。remove方法,在移除key锁对应的映射关系的同时,返回时这个key所对应的value。
3、 Map集合有三个常用实现类:Hashtable,HashMap,TreeMap。注意比较的是,前两者的区别,Hashtable是早先出现的,不可以存入null键和null值,而且同步;HashMap是后出现的,可以存入null键和null值,是不同的步的。相对来说,后者效率更高。
4、 从Hashtable,HashMap,TreeMap的命名上,可以看出存储方式,前两者是按哈希表存储的,后者是按二叉树结构存储的。其他和Set集合中的类似。当我们自定义类时,要注意复写hashCode和equals方法,还有实现Comparable(实现接口compareTo)。
5、 Map集合中没有类似Collection中的迭代器,但有两种方式可以去除元素,整体来说都是转成Set集合。一、keySet方法,把Map集合中的key取出来,放入Set集合,用Set集合中的迭代器取出key,用Map的get方法取出值即可。二、entrySet方法,把Map集合中的映射关系取出,成对的放入Set集合中,注意这个关系时Map.Entry,就是说映射关系时Map.Entry的对象。
6、 Map.Entry实际上是Map集合中的内部接口。
Map集合的拓展,就是不仅限于一对一的映射关系,更多的是一- 黑马程序员_集合(Map)
- 黑马程序员_集合-Map
- 黑马程序员_Java基础_集合(Map类)
- 黑马程序员_Java基础_集合(Map类)
- 黑马程序员_java基础_集合(泛型、Map)
- 黑马程序员_java入门_集合Map
- 黑马程序员_泛型、Map集合
- 黑马程序员-集合(Map)
- 黑马程序员----集合(Map)
- 黑马程序员_集合3-Map集合派系
- 黑马程序员_集合框架(Collection)集合框架(Map)
- 黑马程序员-----Map集合
- 黑马程序员--Map集合
- 黑马程序员 Map集合
- 黑马程序员-Map集合
- 黑马程序员--集合Map
- 黑马程序员---Map集合
- 黑马程序员-Map集合
- it工程师常用英文自我介绍常用用语
- 如何写Makefile(二)——规则篇(上)
- 网络推广软件哪个好,如何选择最好的群发软件?
- 01背包问题吐血详解
- C语言非局部跳转函数分析
- 黑马程序员_集合(Map)
- 【OpenGL 超级宝典 第五版】学习笔记之Xcode搭建OpenGL开发坏境
- 手机无法连接电脑的手机助手
- 黑马程序员_泛型概述和工具类
- POJ 2479 Maximum sum
- fzu 2087 统计树边 (最小生成树kruskal)
- 是一家为移动应用开发者提供实时的Bug追踪及检测服务的创业公司,
- etcd命令
- C语言函数--E