0- 繼承結構
1- 簡介
- TreeMap的底層實現原理
基於紅黑樹實現的排序Map
- TreeMap增刪改查的時間復雜度
TreeMap的增刪改查和統計相關的操作的時間復雜度都為 O(logn)
- TreeMap的key和value的要求
- 由於實現了Map接口,則key的值不允許重復(重復則覆蓋),也不允許為null,按照key的自然順序排序或者Comparator接口指定的排序方法進行排序。
- value允許重復,也允許為null,當key重復時,會覆蓋此value值。
2- TreeMap的使用場景
考慮如下場景:
- 需要基於排序的統計功能:
由於TreeMap是基於紅黑樹的實現的排序Map,對於增刪改查以及統計的時間復雜度都控制在O(logn)的級別上,相對於HashMap和LikedHashMap的統計操作的(最大的key,最小的key,大於某一個key的所有Entry等等)時間復雜度O(n)具有較高時間效率。
- 需要快速增刪改查的存儲功能:
相對於HashMap和LikedHashMap 這些 hash表的時間復雜度O(1)(不考慮沖突情況),TreeMap的增刪改查的時間復雜度為O(logn)就顯得效率較低。
- 需要快速增刪改查而且需要保證遍歷和插入順序一致的存儲功能:
相對於HashMap和LikedHashMap 這些 hash表的時間復雜度O(1)(不考慮沖突情況),TreeMap的增刪改查的時間復雜度為O(logn)就顯得效率較低。但是HashMap並不保證任何順序性。LikedHashMap額外保證了Map的遍歷順序與put順序一致的有序性。
綜上:場景1適合使用TreeMap,場景2適合使用HashMap,場景3適合使用LikedHashMap,需要注意它們都是非線程安全的,當在並發場景下可以使用其他並發集合或者調用者在調用層去控制並發使得操作串行執行。
-
構造方法摘要
構造方法 Constructor and Description TreeMap()
使用其鍵的自然排序構造一個新的空樹狀圖。TreeMap(Comparator<? super K> comparator)
構造一個新的,空的樹圖,按照給定的比較器排序。TreeMap(Map<? extends K,? extends V> m)
構造一個新的樹狀圖,其中包含與給定地圖相同的映射,根據其鍵的 自然順序進行排序 。TreeMap(SortedMap<K,? extends V> m)
構造一個包含相同映射並使用與指定排序映射相同順序的新樹映射。
-
方法摘要
所有方法接口方法具體的方法 Modifier and Type Method and Description Map.Entry<K,V>
ceilingEntry(K key)
返回與大於或等於給定鍵的最小鍵相關聯的鍵值映射,如果沒有此鍵,則null
。K
ceilingKey(K key)
返回大於或等於給定鍵的null
鍵,如果沒有此鍵,則返回null
。void
clear()
從這張地圖中刪除所有的映射。Object
clone()
返回此TreeMap
實例的淺拷貝。Comparator<? super K>
comparator()
返回用於訂購此地圖中的鍵的比較器,或null
如果此地圖使用其鍵的 natural ordering 。boolean
containsKey(Object key)
如果此映射包含指定鍵的映射,則返回true
。boolean
containsValue(Object value)
如果此地圖將一個或多個鍵映射到指定值,則返回true
。NavigableSet<K>
descendingKeySet()
返回此地圖中包含的鍵的相反順序NavigableSet
。NavigableMap<K,V>
descendingMap()
返回此映射中包含的映射的反向排序視圖。Set<Map.Entry<K,V>>
entrySet()
返回此地圖中包含的映射的Set
視圖。Map.Entry<K,V>
firstEntry()
返回與該地圖中的最小鍵相關聯的鍵值映射,如果地圖為空,則返回null
。K
firstKey()
返回此地圖中當前的第一個(最低)鍵。Map.Entry<K,V>
floorEntry(K key)
返回與小於或等於給定鍵的最大鍵相關聯的鍵值映射,如果沒有此鍵,則null
。K
floorKey(K key)
返回小於或等於給定鍵的最大鍵,如果沒有這樣的鍵,則返回null
。void
forEach(BiConsumer<? super K,? super V> action)
對此映射中的每個條目執行給定的操作,直到所有條目都被處理或操作引發異常。V
get(Object key)
返回到指定鍵所映射的值,或null
如果此映射包含該鍵的映射。SortedMap<K,V>
headMap(K toKey)
返回此地圖部分的視圖,其密鑰嚴格小於toKey
。NavigableMap<K,V>
headMap(K toKey, boolean inclusive)
返回此地圖部分的視圖,其鍵值小於(或等於,如果inclusive
為真)toKey
。Map.Entry<K,V>
higherEntry(K key)
返回與最小密鑰相關聯的密鑰值映射嚴格大於給定密鑰,如果沒有這樣的密鑰則null
。K
higherKey(K key)
返回嚴格大於給定鍵的最小鍵,如果沒有這樣的鍵,則返回null
。Set<K>
keySet()
返回此地圖中包含的鍵的Set
視圖。Map.Entry<K,V>
lastEntry()
返回與該地圖中最大關鍵字關聯的鍵值映射,如果地圖為空,則返回null
。K
lastKey()
返回當前在此地圖中的最后(最高)鍵。Map.Entry<K,V>
lowerEntry(K key)
返回與最大密鑰相關聯的密鑰值映射嚴格小於給定密鑰,如果沒有這樣的密鑰,則null
。K
lowerKey(K key)
返回嚴格小於給定鍵的最大鍵,如果沒有這樣的鍵,則返回null
。NavigableSet<K>
navigableKeySet()
返回此地圖中包含的鍵的NavigableSet
視圖。Map.Entry<K,V>
pollFirstEntry()
刪除並返回與該地圖中的最小鍵相關聯的鍵值映射,如果地圖為空,則返回null
。Map.Entry<K,V>
pollLastEntry()
刪除並返回與該地圖中最大密鑰相關聯的鍵值映射,如果地圖為空,則返回null
。V
put(K key, V value)
將指定的值與此映射中的指定鍵相關聯。void
putAll(Map<? extends K,? extends V> map)
將指定地圖的所有映射復制到此地圖。V
remove(Object key)
從此TreeMap中刪除此鍵的映射(如果存在)。V
replace(K key, V value)
只有當目標映射到某個值時,才能替換指定鍵的條目。boolean
replace(K key, V oldValue, V newValue)
僅當當前映射到指定的值時,才能替換指定鍵的條目。void
replaceAll(BiFunction<? super K,? super V,? extends V> function)
將每個條目的值替換為對該條目調用給定函數的結果,直到所有條目都被處理或該函數拋出異常。int
size()
返回此地圖中鍵值映射的數量。NavigableMap<K,V>
subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
返回此地圖部分的視圖,其關鍵范圍為fromKey
至toKey
。(boolean true代表包含,false代表不包含)SortedMap<K,V>
subMap(K fromKey, K toKey)
返回此地圖部分的視圖,其關鍵字范圍從fromKey
(含)到toKey
,獨占。SortedMap<K,V>
tailMap(K fromKey)
返回此地圖部分的視圖,其鍵大於等於fromKey
。NavigableMap<K,V>
tailMap(K fromKey, boolean inclusive)
返回此地圖部分的視圖,其鍵大於(或等於,如果inclusive
為真)fromKey
。Collection<V>
values()
返回此地圖中包含的值的Collection
視圖。