Java源碼解析之SortedMap和NavigableMap

一、前言

由於亂序的數據對查找不利,例如無法使用二分法等降低算法的時間復雜度,如果數據在插入時就排好序,查找的性能聚會提升很多。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接口

我們來看看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();

到此這篇關於Java源碼解析之SortedMap和NavigableMap的文章就介紹到這瞭,更多相關Java SortedMap和NavigableMap內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: