Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
SortedMap 是 Map,它按升序维护其条目,根据键的自然顺序排序,或者根据 SortedMap 创建时提供的 Comparator。自然排序和 Comparator 在 Object Ordering 部分中讨论。SortedMap 接口提供正常 Map 操作的操作,以及以下操作:
Range view 对有序 map 执行任意范围操作Endpoints 返回有序 map 中的第一个或最后一个键Comparator access 返回用于对 map 进行排序的 Comparator(如果有)以下接口是 SortedSet 的 Map 模拟。
public interface SortedMap<K, V> extends Map<K, V>{
Comparator<? super K> comparator();
SortedMap<K, V> subMap(K fromKey, K toKey);
SortedMap<K, V> headMap(K toKey);
SortedMap<K, V> tailMap(K fromKey);
K firstKey();
K lastKey();
}
SortedMap 从 Map 继承的操作,在有序 map 和正常 map 的行为完全相同,但有两个例外:
iterator 操作在任何有序 map 的 Collection 视图上返回的 Iterator 按顺序遍历集合。Collection 视图的 toArray 操作返回的数组按顺序包含键,值或条目。虽然接口无法保证,但所有 Java 平台的 SortedMap 实现中 Collection 视图的 toString 方法,返回包含视图所有元素内容的字符串,按顺序排列。
按照规范,所有通用 Map 实现都提供了一个标准转换构造函数,它采用 Map; SortedMap 实现也不例外。在 TreeMap 中,此构造函数创建一个实例,根据其键的自然顺序对其条目进行排序。这可能是一个错误。最好动态检查以查看指定的 Map 实例是否为 SortedMap,如果是,则根据相同的标准对新 map 进行排序(比较器或自然排序)。因为 TreeMap 采用了该方法,它还提供了一个构造函数,它接受 SortedMap 并返回一个新的 TreeMap,其中包含与给定的 SortedMap 相同的映射,根据相同的标准排序。请注意,它是参数的编译时类型,而不是其运行时类型,它确定是否优先于普通的 map 构造函数调用 SortedMap 构造函数。
按照规范,SortedMap 实现还提供了一个构造函数,它接受 Comparator 并返回根据指定的 Comparator 排序的空 map。如果将 null 传递给此构造函数,它将返回 Map,根据其键的自然顺序对其映射进行排序。
因为此接口是 SortedSet 的精确 Map 模拟,所以 The SortedSet Interface 部分中的所有习惯用法和代码示例都适用于 SortedMap 只做了一些微不足道的修改。