SortedMap
由于乱序的数据对查找不利,例如无法使用二分法等降低算法的时间复杂度,如果数据在插入时就排好顺序,查找的性能就会提升很多。SortedMap
接口就是为这种有序数据服务的。
SortedMap
接口需要数据的key支持Comparable
,或者可以被指定的Comparator
接受。SortedMap
主要提供了以下方法:
// 返回排序数据所用的Comparator
Comparator<? super K> comparator();
// 返回在[fromKey, toKey)之间的数据
SortedMap<K,V> subMap(K fromKey, K toKey);
// 返回从个元素到toKey之间的数据
SortedMap<K,V> headMap(K toKey);
// 返回从fromKey到末尾之间的数据
SortedMap<K,V> tailMap(K fromKey);
//返回个数据的key
K firstKey();
//返回后一个数据的key
K lastKey();
SortedMap
主要提供了获取子集,以及获取大值(后一个值)和小值(个值)的方法。
NavigableMap
SortedMap
提供了获取大值与小值的方法,但对于一个已经排序的数据集,除了大值与小值之外,我们可以对任何一个元素,找到比它小的值和比它大的值,还可以按照按照原有的顺序倒序排序等。NavigableMap
就为我们提供了这些功能。
NavigableMap
主要有以下方法:
// 找到个比指定的key小的值
Map.Entry<K,V> lowerEntry(K key);
// 找到个比指定的key小的key
K lowerKey(K key);
// 找到个小于或等于指定key的值
Map.Entry<K,V> floorEntry(K key);
// 找到个小于或等于指定key的key
K floorKey(K key);
// 找到个大于或等于指定key的值
Map.Entry<K,V> ceilingEntry(K key);
K ceilingKey(K key);
// 找到个大于指定key的值
Map.Entry<K,V> higherEntry(K key);
K higherKey(K key);
// 获取小值
Map.Entry<K,V> firstEntry();
// 获取大值
Map.Entry<K,V> lastEntry();
// 删除小的元素
Map.Entry<K,V> pollFirstEntry();
// 删除大的元素
Map.Entry<K,V> pollLastEntry();
//返回一个倒序的Map
NavigableMap<K,V> descendingMap();
// 返回一个Navigable的key的集合,NavigableSet和NavigableMap类似
NavigableSet<K> navigableKeySet();
// 对上述集合倒序
NavigableSet<K> descendingKeySet();
现在,我们对Map的继承结构有了一定的了解,接下来就看看TreeMap,HashMap是如何实现这些方法的吧。接下来的知识依赖于红黑树,如果你已经忘了红黑树,就翻看前面的文章,先补补课哈。
更多文章正在火速连载中,感谢您的关注!