前言
- {@link Map}进一步提供了其key的总排序。
- map是根据其 key 的 可比自然排序 进行排序的,或者通常是在已排序的 map 创建时提供的 Comparator 进行排序的。
- 排序反映在 遍历排序后的map的集合视图 中(由 entrySet,keySet 和 values 方法返回)。
- 提供了一些附加操作以利用排序的优势。
- 插入已排序映射中的所有键都必须实现{@code Comparable}接口(或被指定的comparator)。
- 此外,所有key必须相互可比较:
- k1.compareTo(k2)或 comparator.compare(k1,k2)不得为任何key k1和k2 抛出 ClassCastException。
- 尝试违反此限制将导致违规方法或构造函数调用抛出 ClassCastException。
- 请注意,如果sorted map要正确实现{@code Map}接口,则sorted map(无论是否提供显式比较器)所维护的顺序必须与equals一致。
- (请参见{@code Comparable}接口或{@code Comparator}接口,以获取与equals一致的精确定义。)
- 之所以这样,是因为{@code Map}接口是根据{@code equals}操作定义的,
- 但是sorted map使用其{@code compareTo}(或{@code compare})方法执行所有键比较,
- 因此,从sorted map的角度来看,此方法认为相等的两个键是相等的。
- tree map 的行为是明确定义的,即使其顺序与equals不一致也是如此;它只是无法遵守{@code Map}接口的一般约定。
- 所有通用sorted map实现类都应提供四个“标准”构造函数。
- 尽管由于接口无法指定所需的构造函数,所以无法实施此建议。所有sorted map 实现的预期“标准”构造函数为:
- 1, 一个默认的无参的构造函数,该方法可以根据key的自然排序,创建一个空的sorted map
- 2, 一个构造器,只有一个参数,就是它的Comparator。该方法根据指定的比较器,创建了一个空的sorted map
- 3, 一个构造器,只有一个参数,map。该方法根据map提供的key-value,和自然排序,来创建一个sorted map
- 4,一个狗仔起,只有一个参数,sortedMap,该方法创建了一个sorted map,和原sroted map具有一致的key-value,和相同的排序。
- 注意:几种方法会返回键范围受限的子map。
- 这样的范围是半开的,也就是说,它们包括其低端点,但不包括其高端点(如果适用)。
- 如果您需要一个封闭范围(包括两个端点),并且key类型允许计算给定key的后继者,
- 只需请求从{@code lowEndpoint}到{@code successor(highEndpoint)}的子范围。
源码
public interface SortedMap<K,V> extends Map<K,V> {
Comparator<? super K> comparator();
/**
* 返回此地map部分的视图,其键值范围从{@code fromKey}(包括)到{@code toKey}(不包括)。
* (如果{@code fromKey}和{@code toKey}相等,则返回的映射为空。)
* 此映射支持返回的映射,因此返回映射中的更改将反映在该映射中,反之亦然。
* 返回的map支持该map支持的所有可选map操作。
* 在返回的map里面插入一个超出范围的key会抛出 IllegalArgumentException 异常。
*
*/
SortedMap<K,V> subMap(K fromKey, K toKey);
/**
* 返回此map部分的视图,其键严格小于{@code toKey}。
* 返回的 map 受此 map 支持,因此返回的 map 中的更改会反映在此 map 中,反之亦然。
* 返回的 map 支持该 map 支持的所有可选 map 操作。
*
* 在返回的map里面插入一个超出范围的key会抛出 IllegalArgumentException 异常。
*
*/
SortedMap<K,V> headMap(K toKey);
/**
* 返回此映射的一部分的视图,其键大于或等于{@code fromKey}。
* 返回的map受此map支持,因此返回的map中的更改会反映在此map中,反之亦然。
* 返回的map支持该map支持的所有可选map操作。
* 在返回的map里面插入一个超出范围的key会抛出 IllegalArgumentException 异常。
*
*/
SortedMap<K,V> tailMap(K fromKey);
/**
* 返回当前map中的第一个key
*/
K firstKey();
/**
* 返回当前map中最后一个key
*/
K lastKey();
/**
* 返回此映射中包含的键的{@link Set}视图。
* 集合的迭代器以升序返回键。该集合由map支持,因此对map的更改会反映在集合中,反之亦然。
* 如果在对集合进行迭代时修改了映射(通过迭代器自己的{@code remove}操作除外),则迭代的结果是不确定的。
* 该集合支持元素删除,该元素删除通过 Iterator.remove,Set.remove,removeAll,keepAll 和 clear 操作。
* 它不支持 add 或 addAll 操作。
*/
Set<K> keySet();
/**
* 返回此映射中包含的值的{@link Collection}视图。
* 集合的迭代器按相应键的升序返回值。集合由map支持,因此对map的更改会反映在集合中,反之亦然。
* 如果在对集合进行迭代时修改了map(通过迭代器自己的{@code remove}操作除外),则迭代的结果是不确定的。
* 该集合支持元素删除,该元素删除通过 Iterator.remove,Set.remove,removeAll,keepAll 和 clear 操作。
* 它不支持 add 或 addAll 操作。
*/
Collection<V> values();
/**
* 返回此映射中包含的映射的{@link Set}视图。集合的迭代器按升序返回条目。
* 该集合由map支持,因此对map的更改会反映在集合中,反之亦然。
* 如果在对集合进行迭代时修改了map(通过迭代器自己的{@code remove}操作除外),则迭代的结果是不确定的。
* 该集合支持元素删除,该元素删除通过 Iterator.remove,Set.remove,removeAll,keepAll 和 clear 操作。
* 它不支持 add 或 addAll 操作。
*/
Set<Map.Entry<K, V>> entrySet();
}
```