这些Java教程是为JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及后续版本中更新的语言特性的摘要。
请参阅JDK发行说明,了解所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息。
SortedMap
是一种按键的自然顺序或在创建SortedMap
时提供的Comparator
进行排序的Map
。自然顺序和Comparator
在对象排序部分进行了讨论。 SortedMap
接口提供了常规Map
操作和以下操作:
范围视图
- 对排序映射执行任意范围操作端点
- 返回排序映射中的第一个或最后一个键比较器访问
- 返回用于排序映射的Comparator
(如果有)以下接口是Map
对应的SortedSet
。
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
继承的操作在排序映射和普通映射上的行为相同,但有两个例外:
Collection
视图上进行的iterator
操作返回的Iterator
按顺序遍历集合。Collection
视图的toArray
操作返回的数组按顺序包含键、值或条目。尽管接口不能保证,但Java平台的所有SortedMap
实现中Collection
视图的toString
方法返回一个包含视图中所有元素的字符串,按顺序排列。
按照惯例,所有通用的Map
实现都提供了一个标准的转换构造函数,接受一个Map
作为参数;SortedMap
的实现也不例外。在TreeMap
中,这个构造函数根据键的自然顺序对条目进行排序。这可能是一个错误。更好的做法是动态检查指定的Map
实例是否是SortedMap
,如果是,则根据相同的标准(比较器或自然顺序)对新映射进行排序。因为TreeMap
采用了它的方法,它还提供了一个接受SortedMap
的构造函数,并返回一个包含与给定SortedMap
相同映射的新TreeMap
,按照相同的标准进行排序。请注意,调用SortedMap
构造函数而不是普通map
构造函数取决于参数的编译时类型,而不是运行时类型。
SortedMap
的实现类通常提供一个构造函数,该构造函数接受一个Comparator
参数,并返回一个根据指定Comparator
进行排序的空Map。如果传入null
给该构造函数,则返回一个根据键的自然顺序进行排序的Map
。
因为这个接口是SortedSet
的一个精确的Map
对应关系,所以在The SortedSet Interface部分中的所有习语和代码示例都适用于SortedMap
,只需进行微小的修改。