Java知识之详解Map架构
发布网友
发布时间:2024-09-07 09:09
我来回答
共1个回答
热心网友
时间:2024-11-30 18:50
Map的相关知识将分为几个部分进行说明。
首先,我们关注Map的架构。
(01) Map是一个映射接口,其存储的内容为键值对(key-value)。
(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,并实现了Map接口;因此,Hashtable的内容也是键值对,也不保证次序。与HashMap相比,Hashtable是线程安全的,并且支持通过Enumeration遍历。
(08) WeakHashMap继承自AbstractMap。它与HashMap的键类型不同,WeakHashMap的键是“弱键”。
Map提供了三种Collection视图,允许以键集、值集和键-值映射关系集的形式查看某个映射内容。
Map的映射顺序,有些实现类保证了顺序,如TreeMap,有些实现类则没有保证顺序,如HashMap。
Map的实现类应该提供两种构造器,一种是无参构造器,用于创建空映射,另一种是带一个Map参数的构造器,用于创建与该map等大小的映射。
Map提供接口分别用于返回键集、值集或键-值映射关系集。entrySet()用于返回键-值集的Set集合,keySet()用于返回键集的Set集合,values()用于返回值集的Collection集合。因为Map中不能包含重复的键,每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集是Collection。
Map提供了“键-值对”、“根据键获取值”、“删除键”、“获取容量大小”等方法。
AbstractMap是一个实现了Map接口的抽象类,不能被实例化,只能作为其他实现类的父类。
AbstractMap实现了Map接口中的大部分方法。
要实现不可修改的映射,开发人员只需扩展此类并提供entrySet方法的实现即可,该方法将返回映射关系set视图,通常,返回的set将依次在AbstractSet上实现。此set不支持add()或remove()方法,其迭代器也不支持remove()方法。
要实现可修改的映射,开发人员必须另外重写此类的put方法(否则将抛出UnsupportedOperationException),entrySet().iterator()返回的迭代器也必须另外实现其remove方法。
SortedMap是一个继承自Map接口的接口。它是一个有序的SortedMap键值映射。SortedMap的排序方式有两种:自然排序或用户指定比较器。插入有序SortedMap的所有元素都必须实现Comparable接口(或者被指定的比较器所接受)。
所有SortedMap实现类都应该提供4个“标准”构造方法:无参数构造方法,创建一个空的有序映射,按照键的自然顺序进行排序。带有一个Comparator类型参数的构造方法,创建一个空的有序映射,根据指定的比较器进行排序。带有一个Map类型参数的构造方法,创建一个新的有序映射,其键-值映射关系与参数相同,按照键的自然顺序进行排序。带有一个SortedMap类型参数的构造方法,创建一个新的有序映射,其键-值映射关系和排序方法与输入的有序映射相同。无法保证强制实施此建议,因为接口不能包含构造方法。
NavigableMap是一个继承自SortedMap的接口。它是一个可导航的键-值对集合。具有为给定搜索目标报告最接近匹配项的导航方法。
NavigableMap分别提供了获取“键”、“键-值对”、“键集”、“键-值对集”的相关方法。
NavigableMap除了继承SortedMap的特性外,它提供的功能可以分为4类:第1类,提供操作键-值对的方法。lowerEntry、floorEntry、ceilingEntry和higherEntry方法,它们分别返回与小于、小于等于、大于等于、大于给定键的键关联的Map.Entry对象。firstEntry、pollFirstEntry、lastEntry和pollLastEntry方法,它们返回和/或移除最小和最大的映射关系(如果存在),否则返回null。第2类,提供操作键的方法。这个和第1类比较类似,lowerKey、floorKey、ceilingKey和higherKey方法,它们分别返回与小于、小于等于、大于等于、大于给定键的键。第3类,获取键集。navigableKeySet、descendingKeySet分别获取正序/反序的键集。第4类,获取键-值对的子集。