一.Map概述
0.前言 首先介绍Map集合,因为Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的)。1:介绍将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口。
2:类图关系
3:讲解
(1):AbstractMap是一个抽象类, 继承Map,实现了Map的大部分API,它的作用Map的实现类继承它,可以减少重复编码!
(2):SortedMap是一个接口 继承Map,自己也封装一下方法,SortedMap中的内容是排序的键值对,排序的方法是通过比较器(Comparator)。SortedMap的排序方式有两种:自然排序 或者 用户指定比较器。 (3):ConcurrentMap是一个接口,并且继承Map接口,在java.util.concurrent包下! (4):HashMap 继承于AbstractMap,HashMap的内容是“键值对,但不保证次序”! (5): TreeMap 继承于AbstractMap,且实现了NavigableMap接口;因此,TreeMap中的内容是键值对,有序的键值对!(6):ConcurrentHashMap继承AbstractMap实现ConcurrentMap,是一个并发的哈希表!此类与 Hashtable 相似,但与 HashMap 不同,它不 允许将 null 用作键或值。线程安全,但是实现方法和Hashtable完全不同(并发情况可以使用) 。
(7):Dictionary是一个抽象类(数据字典),HashTable继承Dictionary并实现Map接口,也是键值对,但不保证次序!Hashtable是线程安全的,而且它支持通过Enumeration去遍历。(现在使用很少,并发操作效率太低)
二.Map的API
void clear() 从此映射中移除所有映射关系(可选操作)。 boolean containsKey(Object key) 如果此映射包含指定键的映射关系,则返回 true。 boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。 Set> entrySet() 返回此映射中包含的映射关系的 Set 视图。 boolean equals(Object o) 比较指定的对象与此映射是否相等。 V get(Object key) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。 int hashCode() 返回此映射的哈希码值。 boolean isEmpty() 如果此映射未包含键-值映射关系,则返回 true。 Set keySet() 返回此映射中包含的键的 Set 视图。 V put(K key, V value) 将指定的值与此映射中的指定键关联(可选操作)。 void putAll(Map m) 从指定映射中将所有映射关系复制到此映射中(可选操作)。 V remove(Object key) 如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。 int size() 返回此映射中的键-值映射关系数。 Collection values() 返回此映射中包含的值的 Collection 视图。
其中:
entrySet()用于返回键-值集的Set集合 keySet()用于返回键集的Set集合 values()用户返回值集的Collection集合
嵌套类:
interface Entry{ 映射项(键-值对 )
三.后言
接下来的博文介绍Map的实现类。主要介绍HashMap和TreeMap!其他的有时间会在去研究!附:Map类图(来源网络)
参考文章:
欢迎访问我的csdn博客,我们一同成长!
"不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!"
博客首页: