1. 程式人生 > >java集合系列——Map之TreeMap介紹(九)

java集合系列——Map之TreeMap介紹(九)

一.TreeMap的簡介
TreeMap是一個有序的key-value集合,基於紅黑樹(Red-Black tree)的 NavigableMap實現。該對映根據其鍵的自然順序進行排序,或者根據建立對映時提供的 Comparator進行排序,具體取決於使用的構造方法。

下面簡單介紹一下 紅黑樹:
1. 根節點是黑色
2. 每個節點都只能是紅色或者黑色
3. 每個葉節點(NIL節點,空節點)是黑色的。
4. 如果一個節點是紅色的,則它兩個子節點都是黑色的,也就是說在一條路徑上不能出現兩個紅色的節點。
5. 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。

二.TreeMap的繼承關係

類 TreeMap<K,V>

java.lang.Object
  繼承者 java.util.AbstractMap<K,V>
      繼承者 java.util.TreeMap<K,V>
型別引數:
K - 此對映維護的鍵的型別
V - 對映值的型別

繼承AbstactMap類,則TreeMap是一個Map,具體key-value特性的集合!

實現了Navigable介面,意味著它支援一系列的導航方法,如有序的key返回。

實現了Cloneable介面,意味著它能被克隆。

實現了Serializable介面,意味著它支援序列化。

三.TreeMap的API
Tree API

1:構造方法

TreeMap() 
          使用鍵的自然順序構造一個新的、空的樹對映。
TreeMap(Comparator<? super K> comparator) 
          構造一個新的、空的樹對映,該對映根據給定比較器進行排序。
TreeMap(Map<? extends K,? extends V> m) 
          構造一個與給定對映具有相同對映關係的新的樹對映,該對映根據其鍵的自然順序 進行排序。
TreeMap(SortedMap<K,? extends V> m) 
          構造一個與指定有序對映具有相同對映關係和相同排序順序的新的樹對映。

2:方法

 Map.Entry<K,V> ceilingEntry(K key) 
          返回一個鍵-值對映關係,它與大於等於給定鍵的最小鍵關聯;如果不存在這樣的鍵,則返回 null。
 K  ceilingKey(K key) 
          返回大於等於給定鍵的最小鍵;如果不存在這樣的鍵,則返回 null。
 void   clear() 
          從此對映中移除所有對映關係。
 Object clone() 
          返回此 TreeMap 例項的淺表副本。
 Comparator<? super K>  comparator() 
          返回對此對映中的鍵進行排序的比較器;如果此對映使用鍵的自然順序,則返回 null。
 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。
 V  get(Object key) 
          返回指定鍵所對映的值,如果對於該鍵而言,此對映不包含任何對映關係,則返回 null。
 SortedMap<K,V> headMap(K toKey) 
          返回此對映的部分檢視,其鍵值嚴格小於 toKey。
 NavigableMap<K,V>  headMap(K toKey, boolean inclusive) 
          返回此對映的部分檢視,其鍵小於(或等於,如果 inclusive 為 true)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 中存在該鍵的對映關係,則將其刪除。
 int    size() 
          返回此對映中的鍵-值對映關係數。
 NavigableMap<K,V>  subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) 
          返回此對映的部分檢視,其鍵的範圍從 fromKey 到 toKey。
 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 為 true)fromKey。
 Collection<V>  values() 
          返回此對映包含的值的 Collection 檢視。

四.原始碼

原始碼和16基本相同,這裡不做分析,可以檢視參考文章。裡面有詳細的介紹!

五.總結

1、TreeMap是根據key進行排序的,它的排序和定位需要依賴比較器或覆寫Comparable介面,也因此不需要key覆寫hashCode方法和equals方法,就可以排除掉重複的key,而HashMap的key則需要通過覆寫hashCode方法和equals方法來確保沒有重複的key。

2、TreeMap的查詢、插入、刪除效率均沒有HashMap高,一般只有要對key排序時才使用TreeMap。

3、TreeMap的key不能為null,而HashMap的key可以為null。

4、TreeMap不是同步的。如果多個執行緒同時訪問一個對映,並且其中至少一個執行緒從結構上修改了該對映,則其必須 外部同步。

SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));


如果帥氣(美麗)、睿智(聰穎),和我一樣簡單善良的你看到本篇博文中存在問題,請指出,我虛心接受你讓我成長的批評,謝謝閱讀!
祝你今天開心愉快!

歡迎訪問我的csdn部落格,我們一同成長!

不管做什麼,只要堅持下去就會看到不一樣!在路上,不卑不亢!

相關推薦

java集合系列——MapTreeMap介紹

一.TreeMap的簡介 TreeMap是一個有序的key-value集合,基於紅黑樹(Red-Black tree)的 NavigableMap實現。該對映根據其鍵的自然順序進行排序,或者根據建立對映時提供的 Comparator進行排序,具體取決於使用的構

Java 集合系列12 TreeMap詳細介紹(原始碼解析)和使用示例

1 package java.util; 2 3 public class TreeMap<K,V> 4 extends AbstractMap<K,V> 5 implements NavigableMap<K,V>, Clone

Java 集合系列12 TreeMap詳細介紹(源碼解析)和使用示例

叠代器 opera java port fail 繼承關系 關於 就是 開始 第1部分 TreeMap介紹TreeMap 簡介 TreeMap 是一個有序的key-value集合,它是通過紅黑樹實現的。TreeMap 繼承於AbstractMap,所以它是一個Map,即一個

Java 集合系列01 總體框架 依賴JDK1.6.0_45

Java集合是java提供的工具包,包含了常用的資料結構:集合、連結串列、佇列、棧、陣列、對映等。Java集合工具包位置是java.util.* Java集合主要可以劃分為4個部分:List列表、Set集合、Map對映、工具類(Iterator迭代器、Enumeration列舉類、Arrays和Co

Java開發程式碼規範程式設計規約

文章通過學習《阿里巴巴Java開發手冊》整理 1。後臺輸送給頁面的變數必須加$!{var}——中間的感嘆號。 如果var= null或者不存在,那麼${var}會直接顯示在頁面上. 2。注

java集合系列——SetHashSet和TreeSet介紹

最大 ... gpo 鏈表 key 同步 中大 nds set接口 一.Set的簡介Set是一個不包含重復元素的 collection。更確切地講,set 不包含滿足 e1.equals(e2) 的元素。對 e1 和 e2,並且最多包含一個為 null 的元素。 Set的類

java集合系列——List集合ArrayList介紹

一:List概述 List是 java.util包下面的類,從 java集合系列——java集合概述(一) 中可以知道,List繼承了Collection 介面! List本身也是一個介面,它的實現有ArrayList 、LinkedList、Vector和CopyOn

Java 集合系列14 Map總結(HashMap, Hashtable, TreeMap, WeakHashMap等使用場景)

1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 import java.util.WeakHashMap; 5 import java.util.Date;

Java 集合系列03 ArrayList詳細介紹

ArrayList做為List介面中最常用的實現類,必須掌握。 一、ArrayList簡介 與Java中的陣列相比ArrayList的容量可以動態增加。它繼承與AbstractList,實現了List, RandomAccess, Cloneable, java.io.Serializable 和Vec

Java 集合系列13 WeakHashMap詳細介紹(源碼解析)和使用示例

ted 常量 虛擬機 分享圖片 deep app default maximum obj 概要這一章,我們對WeakHashMap進行學習。我們先對WeakHashMap有個整體認識,然後再學習它的源碼,最後再通過實例來學會使用WeakHashMap。第1部分 WeakHa

Java 集合系列03 ArrayList詳細介紹(原始碼解析)和使用示例

概要 上一章,我們學習了Collection的架構。這一章開始,我們對Collection的具體實現類進行講解;首先,講解List,而List中ArrayList又最為常用。因此,本章我們講解ArrayList。先對ArrayList有個整體認識,再學習它的原始

#Java 集合系列09 Map架構

概要 前面,我們已經系統的對List進行了學習。接下來,我們先學習Map,然後再學習Set;因為Set的實現類都是基於Map來實現的(如,HashSet是通過HashMap實現的,TreeSet是通過TreeMap實現的)。 首先,我們看看Map架構。 如上圖

Java 集合系列10 HashMap詳細介紹(原始碼解析)和使用示例

概要 這一章,我們對HashMap進行學習。 我們先對HashMap有個整體認識,然後再學習它的原始碼,最後再通過例項來學會使用HashMap。內容包括: 第1部分 HashMap介紹 第2部分 HashMap資料結構 第3部分 HashMap原始碼解析(基於J

Java 集合系列13 WeakHashMap詳細介紹(原始碼解析)和使用示例

1 package java.util; 2 import java.lang.ref.WeakReference; 3 import java.lang.ref.ReferenceQueue; 4 5 public class WeakHashMap<K,V>

Java 集合系列17 TreeSet詳細介紹(原始碼解析)和使用示例

1 package java.util; 2 3 public class TreeSet<E> extends AbstractSet<E> 4 implements NavigableSet<E>, Cloneable, java.i

Java 集合系列09 Map架構

概要 前面,我們已經系統的對List進行了學習。接下來,我們先學習Map,然後再學習Set;因為Set的實現類都是基於Map來實現的(如,HashSet是通過HashMap實現的,TreeSet是通過TreeMap實現的)。 首先,我們看看Map架構。 如上圖:(01) Map 是對映介面,Ma

Java 集合系列11 Hashtable詳細介紹(原始碼解析)和使用示例

1 package java.util; 2 import java.io.*; 3 4 public class Hashtable<K,V> 5 extends Dictionary<K,V> 6 implements Map

Java 集合系列16 HashSet詳細介紹(原始碼解析)和使用示例

1 package java.util; 2 3 public class HashSet<E> 4 extends AbstractSet<E> 5 implements Set<E>, Cloneable, java.i

Java 集合系列07 Stack詳細介紹(原始碼解析)和使用示例

1 import java.util.Stack; 2 import java.util.Iterator; 3 import java.util.List; 4 5 /** 6 * @desc Stack的測試程式。測試常用API的用法 7 * 8 * @autho

Java 集合系列06 Vector詳細介紹(原始碼解析)和使用示例

1 package java.util; 2 3 public class Vector<E> 4 extends AbstractList<E> 5 implements List<E>, RandomAccess, Cl