1

SortedMap接口

SortedMap是一个按升序维护其条目的Map,根据键的自然顺序或在创建SortedMap时提供的Comparator进行排序,SortedMap接口提供常规Map操作和以下操作的操作:

  • 范围视图 — 对排序后的map执行任意范围操作
  • 端点 — 返回已排序map中的第一个或最后一个键
  • 比较器访问 — 返回用于排序mapComparator(如果有的话)

下面的接口是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操作

SortedMap继承自Map的操作在已排序map和常规的map上的行为相同,但有两个例外:

  • iterator操作在已排序map的任何Collection视图上返回的Iterator按顺序遍历集合。
  • Collection视图的toArray操作返回的数组按顺序包含键、值或条目。

虽然接口不能保证这一点,但是Collection视图在所有Java平台的SortedMap实现中的toString方法按顺序返回一个包含视图所有元素的字符串。

标准构造函数

按照惯例,所有通用Map实现都提供一个接受Map的标准转换构造函数,SortedMap实现也不例外。在TreeMap中,这个构造函数创建一个实例,该实例根据键的自然顺序对其条目进行排序,这可能是个错误。最好动态检查指定的Map实例是否是SortedMap,如果是,则根据相同的标准(比较器或自然顺序)对新map排序。因为TreeMap采用了它所采用的方法,所以它还提供了一个构造函数,该构造函数接受SortedMap并返回一个新的TreeMap,其中包含与给定SortedMap相同的映射,按照相同的标准排序。注意,决定是否优先调用SortedMap构造函数而不是普通map构造函数的是参数的编译时类型,而不是运行时类型。

SortedMap实现还按照约定提供了一个构造函数,该构造函数接受Comparator并返回一个根据指定的Comparator排序的空map,如果将null传递给这个构造函数,它将返回一个Map,根据键的自然顺序对映射进行排序。

相比SortedSet

因为这个接口是SortedSet的精确Map模拟,所以SortedSet接口部分中的风格和代码示例都适用于SortedMap,只做了很少的修改。


上一篇:SortedSet接口

博弈
2.5k 声望1.5k 粉丝

态度决定一切