- 类型参数:
-
K
- 此映射维护的键的类型 -
V
- 映射值的类型
- 所有超接口:
-
Map<K,
,V> SequencedMap<K,
V>
- 所有已知子接口:
-
ConcurrentNavigableMap<K,
,V> NavigableMap<K,
V>
- 所有已知实现类:
-
ConcurrentSkipListMap
,TreeMap
Map
。该映射根据其键的自然排序或通常在排序映射创建时提供的Comparator
进行排序。在遍历排序映射的集合视图(由entrySet
、keySet
和values
方法返回)时会反映此顺序。提供了几个额外的操作以利用排序。 (此接口是SortedSet
的映射类比。)
插入到排序映射中的所有键都必须实现Comparable
接口(或被指定的比较器接受)。此外,所有这些键必须是可相互比较的:k1.compareTo(k2)
(或comparator.compare(k1, k2)
)对于排序映射中的任何键k1
和k2
都不得抛出ClassCastException
。试图违反此限制将导致有问题的方法或构造函数调用抛出ClassCastException
。
请注意,排序映射维护的排序(无论是否提供了显式比较器)必须与equals一致,以便排序映射正确实现Map
接口。 (有关与equals一致的精确定义,请参见Comparable
接口或Comparator
接口。)这是因为Map
接口是根据equals
操作定义的,但排序映射使用其compareTo
(或compare
)方法执行所有键比较,因此通过此方法视为相等的两个键在排序映射的角度来看是相等的。即使其排序与equals不一致,树映射的行为也是明确定义的;它只是未遵守Map
接口的一般契约。
所有通用排序映射实现类应提供四个“标准”构造函数。尽管无法强制执行此建议,因为接口无法指定所需的构造函数。所有排序映射实现的预期“标准”构造函数为:
- 一个无参数的构造函数,根据其键的自然排序创建一个空的排序映射。
- 一个带有单个
Comparator
类型参数的构造函数,根据指定的比较器创建一个空的排序映射。 - 一个带有单个
Map
类型参数的构造函数,根据其键的自然排序创建一个具有与其参数相同的键-值映射的新映射。 - 一个带有单个
SortedMap
类型参数的构造函数,根据输入排序映射的相同键-值映射和相同排序创建一个新的排序映射。
注意:几种方法返回具有受限键范围的子映射。这些范围是半开放的,即它们包括其低端点但不包括其高端点(如果适用)。如果需要一个闭合范围(包括两个端点),并且键类型允许计算给定键的后继,则只需请求从lowEndpoint
到successor(highEndpoint)
的子范围。例如,假设m
是一个键为字符串的映射。以下习语获取一个视图,其中包含m
中键介于low
和high
之间(包括low
和high
)的所有键-值映射:
SortedMap<String, V> sub = m.subMap(low, high+"\0");可以使用类似的技术生成开放范围(不包含任何端点)。以下习语获取一个视图,其中包含
m
中键介于low
和high
之间(不包括high
)的所有键-值映射:
SortedMap<String, V> sub = m.subMap(low+"\0", high);
此接口是 Java集合框架的成员。
- 自 JDK 版本:
- 1.2
- 参见:
-
Nested Class Summary
-
Method Summary
Modifier and TypeMethodDescriptionComparator
<? super K> 返回用于按键排序的比较器,如果此映射使用其键的自然排序,则返回null
。entrySet()
返回包含此映射中包含的映射的Set
视图。firstKey()
返回当前映射中的第一个(最低)键。返回此映射的键严格小于toKey
的部分视图。keySet()
返回包含此映射中的键的Set
视图。lastKey()
返回当前映射中的最后一个(最高)键。default V
抛出UnsupportedOperationException
。default V
抛出UnsupportedOperationException
。reversed()
返回此映射的逆序视图。返回此映射的键范围从fromKey
(包括)到toKey
(不包括)的视图。返回此映射的键严格大于或等于fromKey
的视图。values()
返回包含此映射中包含的值的Collection
视图。Methods declared in interface java.util.Map
clear, compute, computeIfAbsent, computeIfPresent, containsKey, containsValue, equals, forEach, get, getOrDefault, hashCode, isEmpty, merge, put, putAll, putIfAbsent, remove, remove, replace, replace, replaceAll, size
Methods declared in interface java.util.SequencedMap
firstEntry, lastEntry, pollFirstEntry, pollLastEntry, sequencedEntrySet, sequencedKeySet, sequencedValues
-
Method Details
-
comparator
Comparator<? super K> comparator()返回用于按键排序的比较器,如果此映射使用其键的自然排序,则返回null
。- 返回:
-
用于按键排序的比较器,如果此映射使用其键的自然排序,则返回
null
-
subMap
返回此映射的键范围从fromKey
(包括)到toKey
(不包括)的视图。(如果fromKey
和toKey
相等,则返回的映射为空。)返回的映射由此映射支持,因此返回映射中的更改会反映在此映射中,反之亦然。返回的映射支持此映射支持的所有可选映射操作。如果尝试插入超出其范围的键,则返回的映射将抛出
IllegalArgumentException
。- 参数:
-
fromKey
- 返回的映射中键的低端点(包括) -
toKey
- 返回的映射中键的高端点(不包括) - 返回:
-
从
fromKey
(包括)到toKey
(不包括)的键范围的视图 - 抛出:
-
ClassCastException
- 如果无法使用此映射的比较器(或如果映射没有比较器,则使用自然排序)比较fromKey
和toKey
。如果fromKey
或toKey
无法与当前映射中的键进行比较,则实现可能会(但不是必须)抛出此异常。 -
NullPointerException
- 如果fromKey
或toKey
为null且此映射不允许空键 -
IllegalArgumentException
- 如果fromKey
大于toKey
;或如果此映射本身具有受限范围,并且fromKey
或toKey
位于范围的边界之外
-
headMap
返回其键严格小于toKey
的部分视图。返回的映射由此映射支持,因此返回映射中的更改会反映在此映射中,反之亦然。返回的映射支持此映射支持的所有可选映射操作。如果尝试插入超出其范围的键,则返回的映射将抛出
IllegalArgumentException
。- 参数:
-
toKey
- 返回的地图中键的高端点(不包括) - 返回:
-
返回该地图部分的视图,其键严格小于
toKey
- 抛出:
-
ClassCastException
- 如果toKey
与该地图的比较器不兼容(或者,如果地图没有比较器,如果toKey
没有实现Comparable
)。如果toKey
无法与地图中当前的键进行比较,则实现可能会抛出此异常,但不是必须的。 -
NullPointerException
- 如果toKey
为null且该地图不允许空键 -
IllegalArgumentException
- 如果该地图本身具有受限范围,并且toKey
位于范围之外
-
tailMap
返回一个视图,其中键大于或等于fromKey
。返回的地图由此地图支持,因此返回地图中的更改会反映在此地图中,反之亦然。返回的地图支持此地图支持的所有可选地图操作。如果尝试在其范围之外插入键,则返回的地图将抛出
IllegalArgumentException
。- 参数:
-
fromKey
- 返回的地图中键的低端点(包括) - 返回:
-
返回该地图部分的视图,其键大于或等于
fromKey
- 抛出:
-
ClassCastException
- 如果fromKey
与该地图的比较器不兼容(或者,如果地图没有比较器,如果fromKey
没有实现Comparable
)。如果fromKey
无法与地图中当前的键进行比较,则实现可能会抛出此异常,但不是必须的。 -
NullPointerException
- 如果fromKey
为null且该地图不允许空键 -
IllegalArgumentException
- 如果该地图本身具有受限范围,并且fromKey
位于范围之外
-
firstKey
K firstKey()返回当前地图中的第一个(最低)键。- 返回:
- 当前地图中的第一个(最低)键
- 抛出:
-
NoSuchElementException
- 如果该地图为空
-
lastKey
K lastKey()返回当前地图中的最后一个(最高)键。- 返回:
- 当前地图中的最后一个(最高)键
- 抛出:
-
NoSuchElementException
- 如果该地图为空
-
keySet
返回包含在此地图中的键的Set
视图。该集合的迭代器以升序返回键。该集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了地图(除了通过迭代器自己的remove
操作),则迭代的结果是未定义的。该集合支持元素删除,通过Iterator.remove
、Set.remove
、removeAll
、retainAll
和clear
操作从地图中删除相应的映射。它不支持add
或addAll
操作。 -
values
Collection<V> values()返回包含在此地图中的值的Collection
视图。该集合的迭代器按照相应键的升序返回值。该集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了地图(除了通过迭代器自己的remove
操作),则迭代的结果是未定义的。该集合支持元素删除,通过Iterator.remove
、Collection.remove
、removeAll
、retainAll
和clear
操作从地图中删除相应的映射。它不支持add
或addAll
操作。 -
entrySet
返回包含在此地图中的映射的Set
视图。该集合的迭代器以升序键顺序返回条目。该集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了地图(除了通过迭代器自己的remove
操作或通过迭代器返回的地图条目的setValue
操作),则迭代的结果是未定义的。该集合支持元素删除,通过Iterator.remove
、Set.remove
、removeAll
、retainAll
和clear
操作从地图中删除相应的映射。它不支持add
或addAll
操作。 -
putFirst
抛出UnsupportedOperationException
。由此地图的比较方法引起的遇到顺序确定了映射的位置,因此不支持显式定位。- 指定者:
-
putFirst
在接口SequencedMap<K,
V> - 实现要求:
-
此接口中的实现始终抛出
UnsupportedOperationException
。 - 参数:
-
k
- 键 -
v
- 值 - 返回:
- 与k关联的先前值,如果没有则为null
- 抛出:
-
UnsupportedOperationException
- 总是 - 自:
- 21
-
putLast
抛出UnsupportedOperationException
。由此地图的比较方法引起的遇到顺序确定了映射的位置,因此不支持显式定位。- 指定者:
-
putLast
在接口SequencedMap<K,
V> - 实现要求:
-
此接口中的实现始终抛出
UnsupportedOperationException
。 - 参数:
-
k
- 键 -
v
- 值 - 返回:
- 与k关联的先前值,如果没有则为null
- 抛出:
-
UnsupportedOperationException
- 总是 - 自:
- 21
-
reversed
返回此地图的逆序视图。返回视图中的映射的遇到顺序是该地图中映射的遇到顺序的逆序。逆序排序会影响所有对顺序敏感的操作,包括对返回视图的视图集合的操作。如果实现允许修改此视图,则对底层地图的修改会“写入”到逆序视图中。对底层地图的更改可能会或可能不会在此逆序视图中可见,这取决于实现。- 指定者:
-
reversed
在接口SequencedMap<K,
V> - 实现要求:
-
此接口中的实现返回一个逆序排序的SortedMap视图。视图的
reversed()
方法返回对此SortedMap的引用。视图上的其他操作通过调用此SortedMap上的公共方法实现。调用视图上的调用与调用此SortedMap上的调用之间的确切关系未指定。但是,对顺序敏感的操作通常会委托给具有相反方向的适当方法。例如,在视图上调用firstEntry
会导致在此SortedMap上调用lastEntry
。 - 返回:
-
该地图的逆序视图,作为
SortedMap
- 自:
- 21
-