TreeMap
TreeMap是基于红黑树(一种自均衡的二叉查找树)实现的一个担保有序性的Map,在担任干系布局图中可以得知TreeMap实现了NavigableMap接口,而该接口又担任了SortedMap接口,我们先来看看这两个接口界说了一些什么成果。
首先是SortedMap接口,实现该接口的实现类该当凭据自然排序担保key的有序性,所谓自然排序等于按照key的compareTo()函数(需要实现Comparable接口)可能在结构函数中传入的Comparator实现类来举办排序,荟萃视图遍历元素的顺序也该当与key的顺序一致。SortedMap接口还界说了以下几个有效操作有序性的函数:
package java.util;
public interface SortedMap<K,V> extends Map<K,V> {
/**
* 用于在此Map中对key举办排序的较量器,假如为null,则利用key的compareTo()函数举办较量。
*/
Comparator<? super K> comparator();
/**
* 返回一个key的范畴为从fromKey到toKey的局部视图(包罗fromKey,不包罗toKey,包左不包右),
* 假如fromKey和toKey是相等的,则返回一个空视图。
* 返回的局部视图同样是此Map的荟萃视图,所以对它的操纵是会与Map相互影响的。
*/
SortedMap<K,V> subMap(K fromKey, K toKey);
/**
* 返回一个严格地小于toKey的局部视图。
*/
SortedMap<K,V> headMap(K toKey);
/**
* 返回一个大于或便是fromKey的局部视图。
*/
SortedMap<K,V> tailMap(K fromKey);
/**
* 返回当前Map中的第一个key(最小)。
*/
K firstKey();
/**
* 返回当前Map中的最后一个key(最大)。
*/
K lastKey();
Set<K> keySet();
Collection<V> values();
Set<Map.Entry<K, V>> entrySet();
}
然后是SortedMap的子接口NavigableMap,该接口扩展了一些用于导航(Navigation)的要领,像函数lowerEntry(key)会按照传入的参数key返回一个小于key的最大的一对键值对,譬喻,我们如下挪用lowerEntry(6),那么将返回key为5的键值对,假如没有key为5,则会返回key为4的键值对,以此类推,直到返回null(实在找不到的环境下)。
public static void main(String[] args) {
NavigableMap<Integer, Integer> map = new TreeMap<>();
for (int i = 0; i < 10; i++)
map.put(i, i);
assert map.lowerEntry(6).getKey() == 5;
assert map.lowerEntry(5).getKey() == 4;
assert map.lowerEntry(0).getKey() == null;
}
NavigableMap界说的都是一些雷同于lowerEntry(key)的要领和以逆序、升序排序的荟萃视图,这些要领操作有序性实现了对比SortedMap接口越发机动的操纵。
package java.util;
public interface NavigableMap<K,V> extends SortedMap<K,V> {
/**
* 返回一个小于指定key的最大的一对键值对,假如找不到则返回null。
*/
Map.Entry<K,V> lowerEntry(K key);
/**
* 返回一个小于指定key的最大的一个key,假如找不到则返回null。
*/
K lowerKey(K key);
/**
* 返回一个小于或便是指定key的最大的一对键值对,假如找不到则返回null。
*/
Map.Entry<K,V> floorEntry(K key);
/**
* 返回一个小于或便是指定key的最大的一个key,假如找不到则返回null。
*/
K floorKey(K key);
/**
* 返回一个大于或便是指定key的最小的一对键值对,昆山软件公司,假如找不到则返回null。
*/
Map.Entry<K,V> ceilingEntry(K key);
/**
* 返回一个大于或便是指定key的最小的一个key,假如找不到则返回null。
*/
K ceilingKey(K key);
/**
* 返回一个大于指定key的最小的一对键值对,假如找不到则返回null。
*/
Map.Entry<K,V> higherEntry(K key);
/**
* 返回一个大于指定key的最小的一个key,假如找不到则返回null。
*/
K higherKey(K key);
/**
* 返回该Map中最小的键值对,假如Map为空则返回null。
*/
Map.Entry<K,V> firstEntry();
/**
* 返回该Map中最大的键值对,假如Map为空则返回null。
*/
Map.Entry<K,V> lastEntry();
/**
* 返回并删除该Map中最小的键值对,假如Map为空则返回null。
*/
Map.Entry<K,V> pollFirstEntry();
/**
* 返回并删除该Map中最大的键值对,假如Map为空则返回null。
*/
Map.Entry<K,V> pollLastEntry();
/**
* 返回一个以当前Map降序(逆序)排序的荟萃视图
*/
NavigableMap<K,V> descendingMap();
/**
* 返回一个包括当前Map中所有key的荟萃视图,该视图中的key以升序(正序)排序。
*/
NavigableSet<K> navigableKeySet();
/**
* 返回一个包括当前Map中所有key的荟萃视图,该视图中的key以降序(逆序)排序。
*/
NavigableSet<K> descendingKeySet();
/**
* 与SortedMap.subMap根基一致,区别在于多的两个参数fromInclusive和toInclusive,
* 它们代表是否包括from和to,假如fromKey与toKey相等,而且fromInclusive与toInclusive
* 都为true,那么不会返回空荟萃。
*/
NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive,
K toKey, boolean toInclusive);
/**
* 返回一个小于或便是(inclusive为true的环境下)toKey的局部视图。
*/
NavigableMap<K,V> headMap(K toKey, boolean inclusive);
/**
* 返回一个大于或便是(inclusive为true的环境下)fromKey的局部视图。
*/
NavigableMap<K,V> tailMap(K fromKey, boolean inclusive);
/**
* 等价于subMap(fromKey, true, toKey, false)。
*/
SortedMap<K,V> subMap(K fromKey, K toKey);
/**
* 等价于headMap(toKey, false)。
*/
SortedMap<K,V> headMap(K toKey);
/**
* 等价于tailMap(fromKey, true)。
*/
SortedMap<K,V> tailMap(K fromKey);
}