一.概述
1.Map集合在Java集合类的关系如下图所示
2.Map集合的定义及其方法摘要
Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。即一个映射不能包含重复的键;每个键最多只能映射到一个值。
Collection:单列集合;Map是双列集合。
Map 接口提供三种collection 视图,允许以键集(KeySet)、值集(values)或键-值映射关系集(entrySet)的形式查看某个映射的内容。映射顺序定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。
方法摘要:
1.添加:put(K key,V value):如果添加时出现相同的键,那么新的值会替换掉旧的值,并且put方法会返回被覆盖的值。
putAll(Map<? extends K,? extends V> m) :从指定映射中将所有映射关系复制到此映射中(可选操作)。
2.删除:clear():从此映射中移除所有映射关系(可选操作)。
remove(Objcet key):如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
3.判断:containsKey(Object key):如果此映射包含指定键的映射关系,则返回 true。
containsValue(Object value) :如果此映射将一个或多个键映射到指定值,则返回 true。
equals(Object o):比较指定的对象与此映射是否相等。
isEmpty():如果此映射未包含键-值映射关系,则返回 true。
4.获取:get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回
size():返回此映射中的键值关系数。
entrySet():返回此映射中包含的映射关系的 Set 视图。
keySet():返回此映射中包含的键的 Set 视图。
values():返回此映射中包含的值的 Collection 视图。
二.Map集合的注意点
1.Hashtable,HashMap,TreeMap的区别
Hashtable:此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。(该集合线程不同步)
HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
TreeMap:底层是二叉树结构,线程不同步,且具有顺序(对键进行了排序)。
Set底层就是使用了Map集合。
2.Map 集合的两种获取方式
(1)KeySet:将map中所有的键存入到Set集合。因为set具备迭代器。 所有可以迭代方式取出所有的键,再根据map的get方法。获取每一个键对应的值。
图解:
代码示例:
(2)entrySet:将map集合中的映射关系存入到了set集合中, 然后使用迭代器将set集合元素取出,再根据 Map.Entry<Object, Object>的getKey(),getValue()方法取出。
这个关系的数据类型就是:Map.Entry
Map.Entry:映射项(键-值对)。它返回映射的 collection 视图,其中的元素属于此类。
获得映射项引用的唯一方法是通过此 collection 视图的迭代器来实现。这些 Map.Entry 对象仅在迭代期间有效;更确切地讲,如果在迭代器返回项之后修改了底层映射,则某些映射项的行为是不确定的,除了通过 setValue 在映射项上执行操作之外。
Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口。
图解:
代码示例:
Entry其实就是Map中的一个static内部接口。
为什么要定义在内部呢?
因为只有有了Map集合,有了键值对,才会有键值的映射关系。
关系属于Map集合中的一个内部事物。
而且该事物在直接访问Map集合中的元素。
3.map集合的嵌套
map集合的嵌套只是将其中的键或者值设置为一个map集合而已,其他操作都相同,只是相对麻烦些。没有什么理解难点。
3.小练习
由于字数限制练习部分做附件。
1019 Bytes, 下载次数: 44
小练习代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |