Java 集合之 Map架构

时间:2022-08-27 17:51:03

Map架构

1.Map概述:

1.1 什么是Map:

Map是将键映射到值( key-value )的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。Map 接口提供三种collection 视图,允许以键集(keySet())、值集(values())或-值映射关系集(entrySet())的形式查看某个映射的内容( 即获取键值对的内容 )。映射顺序定义为迭代器在映射的 collection 视图上返回其元素的顺序,即可以映射得到键、值和键-值的Set集合,元素的顺序是由得到的Set集合所决定的。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类 。

1.2 Map与Collection的区别:

· 1.Map 存储的是键值对形式的元素,键唯一,值可以重复。

· 2.Collection 存储的是单列元素,子接口Set元素唯一,子接口List元素可重复。

· 3.Map集合的数据结构值针对键有效,跟值无关,Collection集合的数据结构是针对元素有效

1.3 Map的架构图和继承体系:

Java 集合之 Map架构

如上图:

(01)Map“键值”对映射的抽象接口。该映射不包括重复的键,一个键对应一个值。

(02)AbstractMap 是继承于Map的抽象类,它实现了Map中的大部分API。其它Map的实现类可以通过继承AbstractMap来减少重复编码。

(03)SortedMap 是继承于Map的接口。SortedMap中的内容是排序的键值对,排序的方法是通过比较器(Comparator)。

(04)NavigableMap 是继承于SortedMap的接口。相比于SortedMap,NavigableMap有一系列的导航方法;如"获取大于/等于某对象的键值对"、“获取小于/等于某对象的键值对”等等。

(05) TreeMap 继承于AbstractMap,且实现了NavigableMap接口;因此,TreeMap中的内容是“有序的键值对”!

(06) HashMap 继承于AbstractMap,但没实现NavigableMap接口;因此,HashMap的内容是“键值对,但不保证次序”!

(07)Hashtable虽然不是继承于AbstractMap,但它继承于Dictionary(Dictionary也是键值对的接口),而且也实现Map接口;因此,Hashtable的内容也是“键值对,也不保证次序”。但和HashMap相比,Hashtable是线程安全的,而且它支持通过Enumeration去遍历。

(08) WeakHashMap 继承于AbstractMap。它和HashMap的键类型不同,WeakHashMap的键是“弱键”。

1.4 Map接口定义的常用方法:

1、void clear():删除Map中所以键值对。
2、boolean containsKey(Object key):查询Map中是否包含指定key,如果包含则返回true。
3、boolean containsValue(Object value):查询Map中是否包含指定value,如果包含则返回true。
4、Set entrySet():返回Map中所包含的键值对所组成的Set集合,每个集合元素都是Map.Entry对象(Entry是Map的内部类)。
5、Object get(Object key):返回指定key所对应的value,如Map中不包含key则返回null。
6、boolean isEmpty():查询Map是否为空,如果空则返回true。
7、Set keySet():返回该Map中所有key所组成的set集合。
8、Object put(Object key,Object value):添加一个键值对,如果已有一个相同的key值则新的键值对覆盖旧的键值对。
9、void putAll(Map m):将指定Map中的键值对复制到Map中。
10、Object remove(Object key):删除指定key所对应的键值对,返回可以所关联的value,如果key不存在,返回null。
11、int size():返回该Map里的键值对的个数。
12、Collection values():返回该Map里所有value组成的Collection。
Map中包含一个内部类:Entry。该类封装了一个键值对,它包含了三个方法:
1、Object getKey():返回该Entry里包含的key值。
2、Object getValeu():返回该Entry里包含的value值。
3、Object setValue(V value):设置该Entry里包含的value值,并返回新设置的value值。

说明
(01) Map提供接口分别用于返回 键集、值集或键-值映射关系集。
     entrySet()用于返回-值集Set集合
     keySet()用于返回键集Set集合
     values()用户返回值集Collection集合
     因为Map中不能包含重复的键;每个键最多只能映射到一个值。所以,-值集、键集都是Set,值集时Collection

(02) Map提供了“键-值对”、“根据键获取值”、“删除键”、“获取容量大小”等方法。