这些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,只需进行微小的修改。