Module java.base
Package java.util

Interface SortedMap<K,V>

类型参数:
K - 此映射维护的键的类型
V - 映射值的类型
所有超接口:
Map<K,V>, SequencedMap<K,V>
所有已知子接口:
ConcurrentNavigableMap<K,V>, NavigableMap<K,V>
所有已知实现类:
ConcurrentSkipListMap, TreeMap

public interface SortedMap<K,V> extends SequencedMap<K,V>
一个提供键的总排序Map。该映射根据其键的自然排序或通常在排序映射创建时提供的Comparator进行排序。在遍历排序映射的集合视图(由entrySetkeySetvalues方法返回)时会反映此顺序。提供了几个额外的操作以利用排序。 (此接口是SortedSet的映射类比。)

插入到排序映射中的所有键都必须实现Comparable接口(或被指定的比较器接受)。此外,所有这些键必须是可相互比较的:k1.compareTo(k2)(或comparator.compare(k1, k2))对于排序映射中的任何键k1k2都不得抛出ClassCastException。试图违反此限制将导致有问题的方法或构造函数调用抛出ClassCastException

请注意,排序映射维护的排序(无论是否提供了显式比较器)必须与equals一致,以便排序映射正确实现Map接口。 (有关与equals一致的精确定义,请参见Comparable接口或Comparator接口。)这是因为Map接口是根据equals操作定义的,但排序映射使用其compareTo(或compare)方法执行所有键比较,因此通过此方法视为相等的两个键在排序映射的角度来看是相等的。即使其排序与equals不一致,树映射的行为也是明确定义的;它只是未遵守Map接口的一般契约。

所有通用排序映射实现类应提供四个“标准”构造函数。尽管无法强制执行此建议,因为接口无法指定所需的构造函数。所有排序映射实现的预期“标准”构造函数为:

  1. 一个无参数的构造函数,根据其键的自然排序创建一个空的排序映射。
  2. 一个带有单个Comparator类型参数的构造函数,根据指定的比较器创建一个空的排序映射。
  3. 一个带有单个Map类型参数的构造函数,根据其键的自然排序创建一个具有与其参数相同的键-值映射的新映射。
  4. 一个带有单个SortedMap类型参数的构造函数,根据输入排序映射的相同键-值映射和相同排序创建一个新的排序映射。

注意:几种方法返回具有受限键范围的子映射。这些范围是半开放的,即它们包括其低端点但不包括其高端点(如果适用)。如果需要一个闭合范围(包括两个端点),并且键类型允许计算给定键的后继,则只需请求从lowEndpointsuccessor(highEndpoint)的子范围。例如,假设m是一个键为字符串的映射。以下习语获取一个视图,其中包含m中键介于lowhigh之间(包括lowhigh)的所有键-值映射:

   SortedMap<String, V> sub = m.subMap(low, high+"\0");
可以使用类似的技术生成开放范围(不包含任何端点)。以下习语获取一个视图,其中包含m中键介于lowhigh之间(不包括high)的所有键-值映射:
   SortedMap<String, V> sub = m.subMap(low+"\0", high);

此接口是 Java集合框架的成员。

自 JDK 版本:
1.2
参见:
  • Method Details

    • comparator

      Comparator<? super K> comparator()
      返回用于按键排序的比较器,如果此映射使用其键的自然排序,则返回null
      返回:
      用于按键排序的比较器,如果此映射使用其键的自然排序,则返回null
    • subMap

      SortedMap<K,V> subMap(K fromKey, K toKey)
      返回此映射的键范围从fromKey(包括)到toKey(不包括)的视图。(如果fromKeytoKey相等,则返回的映射为空。)返回的映射由此映射支持,因此返回映射中的更改会反映在此映射中,反之亦然。返回的映射支持此映射支持的所有可选映射操作。

      如果尝试插入超出其范围的键,则返回的映射将抛出IllegalArgumentException

      参数:
      fromKey - 返回的映射中键的低端点(包括)
      toKey - 返回的映射中键的高端点(不包括)
      返回:
      fromKey(包括)到toKey(不包括)的键范围的视图
      抛出:
      ClassCastException - 如果无法使用此映射的比较器(或如果映射没有比较器,则使用自然排序)比较fromKeytoKey。如果fromKeytoKey无法与当前映射中的键进行比较,则实现可能会(但不是必须)抛出此异常。
      NullPointerException - 如果fromKeytoKey为null且此映射不允许空键
      IllegalArgumentException - 如果fromKey大于toKey;或如果此映射本身具有受限范围,并且fromKeytoKey位于范围的边界之外
    • headMap

      SortedMap<K,V> headMap(K toKey)
      返回其键严格小于toKey的部分视图。返回的映射由此映射支持,因此返回映射中的更改会反映在此映射中,反之亦然。返回的映射支持此映射支持的所有可选映射操作。

      如果尝试插入超出其范围的键,则返回的映射将抛出IllegalArgumentException

      参数:
      toKey - 返回的地图中键的高端点(不包括)
      返回:
      返回该地图部分的视图,其键严格小于toKey
      抛出:
      ClassCastException - 如果toKey与该地图的比较器不兼容(或者,如果地图没有比较器,如果toKey没有实现Comparable)。如果toKey无法与地图中当前的键进行比较,则实现可能会抛出此异常,但不是必须的。
      NullPointerException - 如果toKey为null且该地图不允许空键
      IllegalArgumentException - 如果该地图本身具有受限范围,并且toKey位于范围之外
    • tailMap

      SortedMap<K,V> tailMap(K fromKey)
      返回一个视图,其中键大于或等于fromKey。返回的地图由此地图支持,因此返回地图中的更改会反映在此地图中,反之亦然。返回的地图支持此地图支持的所有可选地图操作。

      如果尝试在其范围之外插入键,则返回的地图将抛出IllegalArgumentException

      参数:
      fromKey - 返回的地图中键的低端点(包括)
      返回:
      返回该地图部分的视图,其键大于或等于fromKey
      抛出:
      ClassCastException - 如果fromKey与该地图的比较器不兼容(或者,如果地图没有比较器,如果fromKey没有实现Comparable)。如果fromKey无法与地图中当前的键进行比较,则实现可能会抛出此异常,但不是必须的。
      NullPointerException - 如果fromKey为null且该地图不允许空键
      IllegalArgumentException - 如果该地图本身具有受限范围,并且fromKey位于范围之外
    • firstKey

      K firstKey()
      返回当前地图中的第一个(最低)键。
      返回:
      当前地图中的第一个(最低)键
      抛出:
      NoSuchElementException - 如果该地图为空
    • lastKey

      K lastKey()
      返回当前地图中的最后一个(最高)键。
      返回:
      当前地图中的最后一个(最高)键
      抛出:
      NoSuchElementException - 如果该地图为空
    • keySet

      Set<K> keySet()
      返回包含在此地图中的键的Set视图。该集合的迭代器以升序返回键。该集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了地图(除了通过迭代器自己的remove操作),则迭代的结果是未定义的。该集合支持元素删除,通过Iterator.removeSet.removeremoveAllretainAllclear操作从地图中删除相应的映射。它不支持addaddAll操作。
      指定者:
      keySet 在接口 Map<K,V>
      返回:
      包含在此地图中的键的集合视图,按升序排序
    • values

      Collection<V> values()
      返回包含在此地图中的值的Collection视图。该集合的迭代器按照相应键的升序返回值。该集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了地图(除了通过迭代器自己的remove操作),则迭代的结果是未定义的。该集合支持元素删除,通过Iterator.removeCollection.removeremoveAllretainAllclear操作从地图中删除相应的映射。它不支持addaddAll操作。
      指定者:
      values 在接口 Map<K,V>
      返回:
      包含在此地图中的值的集合视图,按升序键顺序排序
    • entrySet

      Set<Map.Entry<K,V>> entrySet()
      返回包含在此地图中的映射的Set视图。该集合的迭代器以升序键顺序返回条目。该集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了地图(除了通过迭代器自己的remove操作或通过迭代器返回的地图条目的setValue操作),则迭代的结果是未定义的。该集合支持元素删除,通过Iterator.removeSet.removeremoveAllretainAllclear操作从地图中删除相应的映射。它不支持addaddAll操作。
      指定者:
      entrySet 在接口 Map<K,V>
      返回:
      包含在此地图中的映射的集合视图,按升序键顺序排序
    • putFirst

      default V putFirst(K k, V v)
      抛出UnsupportedOperationException。由此地图的比较方法引起的遇到顺序确定了映射的位置,因此不支持显式定位。
      指定者:
      putFirst 在接口 SequencedMap<K,V>
      实现要求:
      此接口中的实现始终抛出UnsupportedOperationException
      参数:
      k - 键
      v - 值
      返回:
      与k关联的先前值,如果没有则为null
      抛出:
      UnsupportedOperationException - 总是
      自:
      21
    • putLast

      default V putLast(K k, V v)
      抛出UnsupportedOperationException。由此地图的比较方法引起的遇到顺序确定了映射的位置,因此不支持显式定位。
      指定者:
      putLast 在接口 SequencedMap<K,V>
      实现要求:
      此接口中的实现始终抛出UnsupportedOperationException
      参数:
      k - 键
      v - 值
      返回:
      与k关联的先前值,如果没有则为null
      抛出:
      UnsupportedOperationException - 总是
      自:
      21
    • reversed

      default SortedMap<K,V> reversed()
      返回此地图的逆序视图。返回视图中的映射的遇到顺序是该地图中映射的遇到顺序的逆序。逆序排序会影响所有对顺序敏感的操作,包括对返回视图的视图集合的操作。如果实现允许修改此视图,则对底层地图的修改会“写入”到逆序视图中。对底层地图的更改可能会或可能不会在此逆序视图中可见,这取决于实现。
      指定者:
      reversed 在接口 SequencedMap<K,V>
      实现要求:
      此接口中的实现返回一个逆序排序的SortedMap视图。视图的reversed()方法返回对此SortedMap的引用。视图上的其他操作通过调用此SortedMap上的公共方法实现。调用视图上的调用与调用此SortedMap上的调用之间的确切关系未指定。但是,对顺序敏感的操作通常会委托给具有相反方向的适当方法。例如,在视图上调用firstEntry会导致在此SortedMap上调用lastEntry
      返回:
      该地图的逆序视图,作为SortedMap
      自:
      21