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
只做了一些微不足道的修改。