SortedMap
public interface SortedMap<K,V>
extends Map<K,V>
进一步提供对其键的总排序的 Map。 映射根据其键的 Comparable 或通常在排序映射创建时提供的 Comparator 进行排序。 此顺序在遍历已排序地图的集合视图(由 entrySet、keySet 和 values 方法返回)时反映出来。 提供了几个额外的操作来利用排序。 (此接口是 SortedSet 的映射类似物。)
插入排序映射的所有键都必须实现 Comparable 接口(或被指定的比较器接受)。 此外,所有这些键必须是相互可比较的:k1.compareTo(k2)(或comparator.compare(k1, k2))不得为排序映射中的任何键k1 和k2 抛出ClassCastException。 尝试违反此限制将导致有问题的方法或构造函数调用抛出 ClassCastException。
请注意,如果有序映射要正确实现 Map 接口,则有序映射维护的排序(无论是否提供显式比较器)必须与 equals 一致。 (参见 Comparable 接口或 Comparator 接口,了解与 equals 一致的精确定义。)这是因为 Map 接口是根据 equals 操作定义的,但排序后的映射使用其 compareTo(或 compare)方法执行所有键比较 ,因此从排序映射的角度来看,此方法认为相等的两个键是相等的。 树形图的行为是明确定义的,即使它的排序与等号不一致; 它只是不遵守 Map 接口的一般合同。
所有通用的排序地图实现类都应该提供四个“标准”构造函数。 尽管无法通过接口指定所需的构造函数,但无法强制执行此建议。 所有排序地图实现的预期“标准”构造函数是:
- 一个 void(无参数)构造函数,它创建一个空的排序映射,根据其键的自然顺序排序。
- 具有 Comparator 类型的单个参数的构造函数,它创建根据指定比较器排序的空排序映射。
- 具有 Map 类型的单个参数的构造函数,它创建一个具有与其参数相同的键值映射的新映射,并根据键的自然顺序进行排序。
- 带有一个 SortedMap 类型参数的构造函数,它创建一个新的有序映射,它具有与输入有序映射相同的键值映射和相同的顺序。
注意:一些方法返回具有受限键范围的子图。 这样的范围是半开的,也就是说,它们包括它们的低端点但不包括它们的高端点(如果适用)。 如果您需要一个封闭范围(包括两个端点),并且密钥类型允许计算给定密钥的后继者,则只需请求从 lowEndpoint 到后继者(highEndpoint)的子范围。 例如,假设 m 是一个键是字符串的映射。 以下习惯用法获取包含 m 中所有键值映射的视图,其键介于低和高之间,包括:
SortedMap<String, V> sub = m.subMap(low, high+"\0");
类似的技术可用于生成开放范围(不包含端点)。 以下成语获取一个视图,其中包含 m 中的所有键值映射,其键在低和高之间,互斥:
SortedMap<String, V> sub = m.subMap(low+"\0", high);
此接口是 Java 集合框架的成员。
嵌套类摘要
从接口 java.util.Map 继承的嵌套类/接口 |
---|
Map.EntryK,V |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
Comparator<? super K> | comparator() | 返回用于对该映射中的键进行排序的比较器,如果此映射使用其键的 Comparable,则返回 null。 |
Set<Map.Entry<K,V>> | entrySet() | 返回此映射中包含的映射的 Set 视图。 |
K | firstKey() | 返回此映射中当前的第一个(最低)键。 |
SortedMapK,V | headMap(K toKey) | 返回此映射部分的视图,其键严格小于 toKey。 |
SetK | keySet() | 返回此映射中包含的键的 Set 视图。 |
K | lastKey() | 返回此映射中当前的最后一个(最高)键。 |
SortedMapK,V | subMap(K fromKey, K toKey) | 返回此映射部分的视图,其键范围从 fromKey(包括)到 toKey(不包括)。 |
SortedMapK,V | tailMap(K fromKey) | 返回此地图部分的视图,其键大于或等于 fromKey。 |
CollectionV | values() | 返回此映射中包含的值的集合视图。 |
从接口 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 |
方法详情
comparator
Comparator<? super K> comparator()
返回用于对该映射中的键进行排序的比较器,如果此映射使用其键的 Comparable,则返回 null。
返回:
用于对该映射中的键进行排序的比较器,如果此映射使用其键的自然排序,则为 null
subMap
SortedMapK,V subMap(K fromKey, K toKey)
返回此映射部分的视图,其键范围从 fromKey(包括)到 toKey(不包括)。 (如果 fromKey 和 toKey 相等,则返回的映射为空。)返回的映射受此映射的支持,因此返回映射中的更改会反映在此映射中,反之亦然。 返回的地图支持该地图支持的所有可选地图操作。
返回的映射将在尝试在其范围之外插入键时抛出 IllegalArgumentException。
参数:
参数名称 | 参数描述 |
---|---|
fromKey | 返回映射中键的低端点(包括) |
toKey | 返回映射中键的高端(不包括) |
返回:
此map部分的视图,其键范围从 fromKey(包括)到 toKey(不包括)
Throws:
Throw名称 | Throw描述 |
---|---|
ClassCastException | 如果 fromKey 和 toKey 无法使用此映射的比较器相互比较(或者,如果映射没有比较器,则使用自然排序)。 如果无法将 fromKey 或 toKey 与映射中当前的键进行比较,则实现可以但不是必须抛出此异常。 |
NullPointerException | 如果 fromKey 或 toKey 为空并且此映射不允许空键 |
IllegalArgumentException | 如果 fromKey 大于 toKey; 或者如果此地图本身具有限制范围,并且 fromKey 或 toKey 位于范围的范围之外 |
headMap
SortedMapK,V headMap(K toKey)
返回此映射部分的视图,其键严格小于 toKey。 返回的地图由此地图支持,因此返回地图中的更改会反映在此地图中,反之亦然。 返回的地图支持该地图支持的所有可选地图操作。
返回的映射将在尝试在其范围之外插入键时抛出 IllegalArgumentException。
参数:
参数名称 | 参数描述 |
---|---|
toKey | 返回映射中键的高端(不包括) |
返回:
此map部分的视图,其键严格小于 toKey
Throws:
Throw名称 | Throw描述 |
---|---|
ClassCastException | 如果 toKey 与此map的比较器不兼容(或者,如果map没有比较器,如果 toKey 没有实现 Comparable)。 如果 toKey 无法与map中当前的键进行比较,则实现可以但不是必须抛出此异常。 |
NullPointerException | 如果 toKey 为空并且此映射不允许空键 |
IllegalArgumentException | 如果此map本身具有受限范围,并且 toKey 位于范围之外 |
tailMap
SortedMapK,V tailMap(K fromKey)
返回此map部分的视图,其键大于或等于 fromKey。 返回的map由此map支持,因此返回map中的更改会反映在此map中,反之亦然。 返回的map支持该map支持的所有可选map操作。
返回的映射将在尝试在其范围之外插入键时抛出 IllegalArgumentException。
参数:
参数名称 | 参数描述 |
---|---|
fromKey | 返回映射中键的低端点(包括) |
返回:
此map部分的视图,其键大于或等于 fromKey
Throws:
Throw名称 | Throw描述 |
---|---|
ClassCastException | 如果 fromKey 与此映射的比较器不兼容(或者,如果映射没有比较器,如果 fromKey 未实现 Comparable)。 如果无法将 fromKey 与当前映射中的键进行比较,则实现可以但不是必须抛出此异常。 |
NullPointerException | 如果 fromKey 为空且此映射不允许空键 |
IllegalArgumentException | 如果此map本身具有限制范围,并且 fromKey 位于范围范围之外 |
firstKey
K firstKey()
返回此映射中当前的第一个(最低)键。
返回:
当前此map中的第一个(最低)键
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果这个map是空的 |
lastKey
K lastKey()
返回此映射中当前的最后一个(最高)键。
返回:
当前在此map中的最后一个(最高)键
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果这个map是空的 |
keySet
SetK keySet()
返回此映射中包含的键的 Set 视图。 集合的迭代器按升序返回键。 集合由map支持,因此对map的更改会反映在集合中,反之亦然。 如果在对集合进行迭代时修改了映射(通过迭代器自己的删除操作除外),则迭代的结果是不确定的。 该集合支持元素移除,即通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的映射。 它不支持 add 或 addAll 操作。
指定者:
接口 MapK,V 中的 keySet
返回:
此映射中包含的键的集合视图,按升序排序
values
CollectionV values()
返回此映射中包含的值的集合视图。 集合的迭代器按相应键的升序返回值。 集合由map支持,因此对map的更改会反映在集合中,反之亦然。 如果在对集合进行迭代时修改了映射(通过迭代器自己的删除操作除外),则迭代的结果是不确定的。 该集合支持元素移除,即通过 Iterator.remove、Collection.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的映射。 它不支持 add 或 addAll 操作。
指定者:
接口 MapK,V 中的值
返回:
此映射中包含的值的集合视图,按升序键排序
entrySet
Set<Map.Entry<K,V>> entrySet()
返回此映射中包含的映射的 Set 视图。 集合的迭代器以升序键顺序返回条目。 集合由map支持,因此对map的更改会反映在集合中,反之亦然。 如果在对集合进行迭代时修改了映射(除了通过迭代器自己的删除操作,或通过迭代器返回的映射条目上的 setValue 操作),则迭代的结果是未定义的。 该集合支持元素移除,即通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的映射。 它不支持 add 或 addAll 操作。
指定者:
接口 MapK,V 中的 entrySet
返回:
此映射中包含的映射的集合视图,按升序键排序