打鼓社区-打鼓教学-最新活动 打鼓社区-打鼓教学-最新活动

vv,我是传奇前传,羊城-打鼓社区-打鼓教学-最新活动

前面,咱们现已体系的对List进行了学习。接下来,咱们先学习Map,然后再学习Set;由于Set的完成类都是依据Map来完成的(如,HashSet是经过HashMap完成的,TreeSet是经过TreeMap完成的)。

首要,咱们看看Map架构。

这儿写图片描绘

如上图:

(01) Map 是映射接口,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(Dictionary也是键值对的接口),并且也完成Map接口;因而,Hashtable的内容也是“键值对,也不确保次第”。但和HashMap比较,Hashtable是线程安全的,并且它支撑经过Enumeration去遍历。

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

在对各个完成类进行具体之前,先来看看各个接口和抽象类的大致介绍

1 Map

Map的界说如下:

public interface Map { }


Map 是一个键值对(key-value)映射接口。Map映射中不能包含重复的键;每个键最多只能映射到一个值。

Map 接口供给三种collection 视图,答应以键集值集键-值映射联系集的办法检查某个映射的内容。

Map 映射次序。有些完成类,能够清晰确保其次序,如 TreeMap;另一些映射完成则不确保次序,如 HashMap 类。

Map 的完成类应该供给2个“规范的”结构办法:第一个,void(无参数)结构办法,用于创立空映射;第二个,带有单个 Map 类型参数的结构办法,用于创立一个与其参数具有相同键-值映射联系的新映射。实际上,后一个结构办法答应用户仿制恣意映射,生成所需类的一个等价映射。虽然无法强制执行此主张(由于接口不能包含结构办法),可是 JDK 中一切通用的映射完成都遵照它。

Map的API

abstract void clear()
abstract boolean containsKey(Object key)
abstract boolean containsValue(Object value)
abstract Set> entrySet()
abstract boolean equals(Object object)
abstract V get(Object key)
abstract int hashCode()
abstract boolean isEmpty()
abstract Set keySet()
abstract V put(K key, V value)
abstract void putAll(Map
abstract V remove(Object key)
abstract int size()
abstract Collection values()

阐明:

(01) Map供给接口别离用于回来 键集值集键-值映射联系集。

entrySet()用于回来键-值集的Set调集

keySet()用于回来键集的Set调集

values()用户回来值集的Collection调集

由于Map中不能包含重复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集时Collection。

(02) Map供给了“键-值对”、“依据键获取值”、“删去键”、“获取容量巨细”等办法。

2 Map.Entry

Map.Entry的界说如下:

interface Entry { }


Map.Entry是Map中内部的一个接口,Map.Entry是键值对,Map经过 entrySet() 获取Map.Entry的键值对调集,然后经过该调集完成对键值对的操作。

Map.Entry的API

abstract boolean equals(Object object)
abstract K getKey()
abstract V getValue()
abstract int hashCode()
abstract V setValue(V object)

3 AbstractMap

AbstractMap的界说如下:

public abstract class AbstractMap implements Map {}


AbstractMap类供给 Map 接口的主干完成,以最大极限地削减完成此接口所需的作业。

要完成不行修正的映射,编程人员只需扩展此类并供给 entrySet 办法的完成即可,该办法将回来映射的映射联系 set 视图。一般,回来的 set 将顺次在 AbstractSet 上完成。此 set 不支撑 add() 或 remove() 办法,其迭代器也不支撑 remove() 办法。

要完成可修正的映射,编程人员有必要别的重写此类的 put 办法(不然将抛出 UnsupportedOperationException),entrySet().iterator() 回来的迭代器也有必要别的完成其 remove 办法。

AbstractMap的API

abstract Set> entrySet()
void clear()
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean equals(Object object)
V get(Object key)
int hashCode()
boolean isEmpty()
Set keySet()
V put(K key, V value)
void putAll(Map
V remove(Object key)
int size()
String toString()
Collection values()
Object clone()

4 SortedMap

SortedMap的界说如下:

public interface SortedMap extends Map { }


SortedMap是一个承继于Map接口的接口。它是一个有序的SortedMap键值映射。

SortedMap的排序办法有两种:天然排序 或许 用户指定比较器。 刺进有序 SortedMap 的一切元素都有必要完成 Comparable 接口(或许被指定的比较器所承受)。

别的,一切SortedMap 完成类都应该供给 4 个“规范”结构办法:

(01) void(无参数)结构办法,它创立一个空的有序映射,依照键的天然次序进行排序。

(02) 带有一个 Comparator 类型参数的结构办法,它创立一个空的有序映射,依据指定的比较器进行排序。

(03) 带有一个 Map 类型参数的结构办法,它创立一个新的有序映射,其键-值映射联系与参数相同,依照键的天然次序进行排序。

(04) 带有一个 SortedMap 类型参数的结构办法,它创立一个新的有序映射,其键-值映射联系和排序办法与输入的有序映射相同。无法确保强制施行此主张,由于接口不能包含结构办法。

SortedMap的API

// 承继于Map的API
abstract void clear()
abstract boolean containsKey(Object key)
abstract boolean containsValue(Object value)
abstract Set> entrySet()
abstract boolean equals(Object object)
abstract V get(Object key)
abstract int hashCode()
abstract boolean isEmpty()
abstract Set keySet()
abstract V put(K key, V value)
abstract void putAll(Map
abstract V remove(Object key)
abstract int size()
abstract Collection values()
// SortedMap新增的API
abstract Comparator
abstract K firstKey()
abstract SortedMap headMap(K endKey)
abstract K lastKey()
abstract SortedMap subMap(K startKey, K endKey)
abstract SortedMap tailMap(K startKey)

5 NavigableMap

NavigableMap的界说如下:

public interface NavigableMap extends SortedMap { }


NavigableMap是承继于SortedMap的接口。它是一个可导航的键-值对调集,具有了为给定查找方针陈述最接近匹配项的导航办法。

NavigableMap别离供给了获取“键”、“键-值对”、“键集”、“键-值对集”的相关办法。

NavigableMap的API

abstract Entry ceilingEntry(K key)
abstract Entry firstEntry()
abstract Entry floorEntry(K key)
abstract Entry higherEntry(K key)
abstract Entry lastEntry()
abstract Entry lowerEntry(K key)
abstract Entry pollFirstEntry()
abstract Entry pollLastEntry()
abstract K ceilingKey(K key)
abstract K floorKey(K key)
abstract K higherKey(K key)
abstract K lowerKey(K key)
abstract NavigableSet descendingKeySet()
abstract NavigableSet navigableKeySet()
abstract NavigableMap descendingMap()
abstract NavigableMap headMap(K toKey, boolean inclusive)
abstract SortedMap headMap(K toKey)
abstract SortedMap subMap(K fromKey, K toKey)
abstract NavigableMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
abstract SortedMap tailMap(K fromKey)
abstract NavigableMap tailMap(K fromKey, boolean inclusive)

阐明:

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类,获取键-值对的子集。

6 Dictionary

Dictionary的界说如下:

public abstract class Dictionary {}


NavigableMap是JDK 1.0界说的键值对的接口,它也包含了操作键值对的根本函数。

Dictionary的API

abstract Enumeration elements()
abstract V get(Object key)
abstract boolean isEmpty()
abstract Enumeration keys()
abstract V put(K key, V value)
abstract V remove(Object key)
abstract int size()
作者:admin 分类:新闻世界 浏览:185 评论:0