SortedMap
是一个Map
,它按键的自然顺序或创建SortedMap
时提供的Comparator
的升序维护其条目。对象排序部分讨论了自然排序和Comparator
。SortedMap
接口提供常规Map
操作以及以下操作:
Range view
—在排序的映射上执行任意范围的操作Endpoints
—返回排序后的映射中的第一个或最后一个键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();
}
Map操作
从Map
继承的SortedMap
操作在排序映射和一般映射上具有相同的行为,但有两个例外:
iterator
操作在任何排序的映射的“Collection
”视图上返回的Iterator
将按顺序遍历集合。Collection
视图的toArray
操作返回的数组按顺序包含键,值或条目。
尽管接口无法保证,但是在所有Java平台的SortedMap
实现中,Collection
视图的toString
方法将按顺序返回包含视图的所有元素的字符串。
标准构造
按照惯例,所有泛型Map
实现都提供一个采用Map
的标准转换构造函数;SortedMap
实现也不例外。在TreeMap
中,此构造函数创建一个实例,该实例根据其键的自然顺序对其条目进行排序。这可能是一个错误。最好动态检查以查看指定的Map
实例是否为SortedMap
,如果是,则根据相同的标准(比较器或自然排序)对新地图进行排序。因为TreeMap
采用了它所采用的方法,所以它还提供了一个构造函数,该构造函数采用SortedMap
并返回一个新的TreeMap
,该TreeMap
包含与给定SortedMap
相同的映射,并根据相同的准则进行了排序。请注意,由参数的编译时类型(而不是其运行时类型)决定是否优先于普通Map
构造函数调用SortedMap
构造函数。
按照约定,SortedMap
实现还提供一个构造方法,该构造方法接受Comparator
并返回根据指定Comparator
排序的空映射。如果将null
传递给此构造方法,则它将返回一个Map
,该Map
根据其键的自然顺序对其映射进行排序。
与SortedSet的比较
因为此接口是SortedSet
的精确Map
类似物,所以SortedSet接口部分中的所有惯用法和代码示例仅需进行少量修改即可应用于SortedMap
。