A Map进一步提供其键上的总排序 。地图根据其键的natural ordering或通过在分类地图创建时提供的Comparator进行排序。当迭代排序的地图的集合视图(由keySet和values方法返回)。提供了几个额外的操作来利用订购。(此接口是在地图类似物SortedSet )。
插入排序映射的所有键必须实现Comparable接口(或被指定的比较器接受)。 另外,所有这些键必须是可互相比较的 :k1.compareTo(k2) (或comparator.compare(k1, k2) )不得抛出ClassCastException任何键k1和k2在分类图。 尝试违反此限制将导致违规方法或构造函数调用抛出ClassCastException 。
请注意,如果有序映射要正确实现由有序映射(无论是否提供了明确的比较器)保持的顺序必须与equals一致 Map接口。 (请参阅Comparable接口或Comparator接口的一致的精确定义与equals)。这是因为该Map接口在来定义equals的操作,但一个有序映射使用其执行所有关键比compareTo (或compare )方法因此,从排序图的角度来看,通过这种方法认为相等的两个关键字是相等的。 树图的行为是明确定义的,即使其顺序与equals不一致; 它只是没有遵守Map接口的总体合同。
所有通用排序映射实现类应提供四个“标准”构造函数。 无法通过接口指定必要的构造函数来执行此建议。 所有排序地图实现的预期“标准”构造函数是:
注意 :几个方法返回带有限制键范围的子图。 这种范围是半开放的 ,也就是说,它们包括其低端点,但不包括其高端点(如适用)。 如果您需要一个封闭的范围 (包括两个端点),并且键类型允许计算给定键的后继,只需要从lowEndpoint到successor(highEndpoint)的子范围。 例如,假设m是其键是字符串的地图。 以下成语获得包含m中所有键值映射的m ,其关键在low和high之间,包括:
SortedMap<String, V> sub = m.subMap(low, high+"\0");
可以使用类似的技术来生成开放范围 (其不包含端点)。 以下成语获得包含m中所有键值映射的m ,其关键在low和high之间,独占:
SortedMap<String, V> sub = m.subMap(low+"\0", high);
一个void(无参数)构造函数,它创建一个根据其键的自然顺序排序的空排序映射。
一个具有Comparator类型的单个参数的构造Comparator ,它创建一个根据指定的比较器排序的空的排序映射。
具有类型为Map的单个参数的构造Map ,其创建具有与其参数相同的键值映射的新映射,根据密钥的自然排序进行排序。
具有类型为SortedMap的单个参数的构造SortedMap ,其创建具有与输入排序映射相同的键值映射和相同顺序的新的排序映射。
comparator() 返回用于订购此地图中的键的比较器,或null如果此地图使用其键的natural ordering 。
entrySet
在接口 Map<K,V>
结果
该地图中包含的映射的集合视图,按升序排序
Set<Map.Entry<K,V>> entrySet()
返回此地图中包含的映射的Set
视图。集合的迭代器按升序键顺序返回条目。该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。如果在集合中的迭代正在进行时(除了通过迭代器自己的remove
操作或通过迭代器返回的映射条目上的setValue
修改映射,则迭代的结果是未定义的。该组支持元件移除,即从映射中相应的映射,经由Iterator.remove
, Set.remove
, removeAll
, retainAll
和clear
操作。它不支持add
或addAll
操作。
Specified by:
values
中的 Map<K,V>
结果
该地图中包含的值的集合视图,按升序排序
Collection<V> values()
返回此地图中包含的值的Collection
视图。集合的迭代器按照相应键的升序返回值。集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。如果在集合中的迭代正在进行时修改映射(除了通过迭代器自己的remove
操作),迭代的结果是未定义的。该collection支持元素移除,即从映射中相应的映射,经由Iterator.remove
, Collection.remove
, removeAll
, retainAll
和clear
操作。它不支持add
或addAll
操作。
Specified by:
keySet
在接口 Map<K,V>
结果
该地图中包含的键的设置视图,按升序排列
Set<K> keySet()
返回此地图中包含的键的Set
视图。该集合的迭代器按升序返回密钥。该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。如果在集合中的迭代正在进行中修改映射(除了通过迭代器自己的remove
操作),迭代的结果是未定义的。该组支持元件移除,即从映射中相应的映射,经由Iterator.remove
, Set.remove
, removeAll
, retainAll
和clear
操作。它不支持add
或addAll
操作。
结果
当前在此地图中的最后(最高)键
异常
NoSuchElementException
- 如果 NoSuchElementException
空
K lastKey()
返回当前在此地图中的最后(最高)键。
结果
当前在此地图中的第一(最低)键
异常
NoSuchElementException
- 如果这张地图是空的
K firstKey()
返回此地图中当前的第一个(最低)键。
参数
fromKey
- 返回地图中的键的低端点(含)
结果
该地图的部分的视图,其键大于或等于 fromKey
异常
ClassCastException
- 如果fromKey
与此映射的fromKey
器不兼容(或者如果映射没有比较器,如果fromKey
不实现Comparable
)。如果fromKey
无法与当前在地图中的键进行比较,则实施可能但不是必须抛出此异常。
NullPointerException
- 如果 fromKey
为空,并且此映射不允许空键
IllegalArgumentException
- 如果这个地图本身有一个有限的范围,而 fromKey
位于范围的范围之外
SortedMap<K,V> tailMap(K fromKey)
返回此地图部分的视图,其键大于或等于fromKey
。返回的地图由此地图支持,因此返回的地图中的更改将反映在该地图中,反之亦然。返回的地图支持该地图支持的所有可选地图操作。
返回的地图将抛出一个IllegalArgumentException
,试图在其范围之外插入一个键。
参数
toKey
- 返回地图中的键的高端点(独占)
结果
该地图的部分密钥严格小于 toKey
异常
ClassCastException
- 如果toKey
与此映射的toKey
器不兼容(或者,如果地图没有比较器,如果toKey
不实现Comparable
)。如果toKey
无法与当前在地图中的键进行比较,则实施可能但不是必须抛出此异常。
NullPointerException
- 如果 toKey
为空,并且此映射不允许空键
IllegalArgumentException
- 如果这个地图本身有一个有限的范围,而 toKey
位于范围的范围之外
SortedMap<K,V> headMap(K toKey)
返回该地图部分的视图,其密钥严格小于toKey
。返回的地图由此地图支持,因此返回的地图中的更改将反映在该地图中,反之亦然。返回的地图支持该地图支持的所有可选地图操作。
返回的地图会抛出一个IllegalArgumentException
,试图在其范围之外插入一个键。
参数
fromKey
- 返回地图中的键的低端点(含)
toKey
- 返回地图中的键的高端点(独占)
结果
该地图的部分视图,其关键范围为 fromKey
(含),至 toKey
,独占
异常
ClassCastException
- 如果fromKey
和toKey
无法使用此映射的比较器彼此进行比较(或者,如果映射没有比较器,则使用自然排序)。如果fromKey
或toKey
无法与当前在地图中的键进行比较,则实施可能但不是必须抛出此异常。
NullPointerException
- 如果 fromKey
或 toKey
为空,并且该地图不允许空键
IllegalArgumentException
- 如果fromKey
大于toKey
; 或者如果该地图本身具有限制范围,并且fromKey
或toKey
位于范围的范围之外
SortedMap<K,V> subMap(K fromKey,
K toKey)
返回此地图部分的视图,其关键字范围为fromKey
(含),不toKey
toKey。(如果fromKey
和toKey
相等,则返回的地图为空。)返回的地图由该地图支持,所以返回的地图中的更改将反映在该地图中,反之亦然。返回的地图支持该地图支持的所有可选地图操作。
返回的地图将扔一个IllegalArgumentException
尝试在其范围之外插入一个键。
结果
比较器用于订购此地图中的按键,或 null
如果该地图使用其键的自然排序
Comparator<? super K> comparator()
返回用于订购此地图中的键的比较器,或null
如果此地图使用其键的natural ordering 。