JDK容器學習之TreeMap (二) : 使用說明

TreeMap 使用說明

TreeMap 的底層數據結構爲紅黑樹,主要是根據key進行排序,相比較於HashMap的數組+鏈表+紅黑樹的數據結構而言,二者的應用場景是有明顯的區別的數組

1. TreeMap 的優勢

1. 紅黑樹,先天支持排序

TreeMap 根絕key進行比較排序數據結構

  • 支持自定義實現的比較器
  • key實現 Comparable 接口

HashMap 無排序功能學習

2. 存儲空間少

Treemap 紅黑樹中一個節點對應一個kv對,沒有冗餘無效的Node節點.net

HashMap 的數組中,可能存在較多的空位code

2. TreeMap 的缺點

1. 查詢的時間複雜度

正常來說,TreeMap 的查詢時間複雜度爲 O(logN), 而HashMap爲 O(1)blog

因此Map的元素越多,TreeMap根據key查詢的效率會更低;排序

另外一方面,HashMap 在糟糕的狀況下,可能退化爲鏈表接口

2. 修改致使重排

TreeMap 每次新增or刪除一個kv對,均可能致使紅黑樹的重排get

HashMap 當新增一個kv對,使得Map中的個數大於閥值時,須要對數組進行從新擴容效率

3. 使用場景

經過上面的優缺點對比,能夠看出TreeMap和HashMap二者的使用場景差異算是比較大的

對Map中的kv對有排序需求時,選擇 TreeMap, 這種場景下,儘可能保證如下幾點

  • Map 元素基本保持不變(即不多添加和刪除)
  • 主要用於遍歷迭代獲取數據
  • 不存在碰撞的狀況(即兩個不一樣的key,根據比較器獲取值不能爲0)

相關博文

關注更多

掃一掃二維碼,關注 小灰灰blog

https://static.oschina.net/uploads/img/201709/22221611_Fdo5.jpg

相關文章
相關標籤/搜索