TreeMap 和 TreeSet 是 Java Collection Framework 的兩個重要成員,其中 TreeMap 是 Map 接口的常用實現類,而 TreeSet 是 Set 接口的常用實現類。雖然 TreeMap 和TreeSet 實現的接口規范不同,但 TreeSet 底層是通過 TreeMap 來實現的(如同HashSet底層是是通過HashMap來實現的一樣),因此二者的實現方式完全一樣。而 TreeMap 的實現就是紅黑樹算法
TreeSet和TreeMap的關系
與HashSet完全類似,TreeSet里面絕大部分方法都市直接調用TreeMap方法來實現的。
相同點:
- TreeMap和TreeSet都是非同步集合,因此他們不能在多線程之間共享,不過可以使用方法Collections.synchroinzedMap()來實現同步
- 運行速度都要比Hash集合慢,他們內部對元素的操作時間復雜度為O(logN),而HashMap/HashSet則為O(1)。
- TreeMap和TreeSet都是有序的集合,也就是說他們存儲的值都是拍好序的。
不同點:
- 最主要的區別就是TreeSet和TreeMap分別實現Set和Map接口
- TreeSet只存儲一個對象,而TreeMap存儲兩個對象Key和Value(僅僅key對象有序)
- TreeSet中不能有重復對象,而TreeMap中可以存在
- TreeMap的底層采用紅黑樹的實現,完成數據有序的插入,排序。
紅黑樹的特點:
- 性質 1:每個節點要么是紅色,要么是黑色。
- 性質 2:根節點永遠是黑色的。
- 性質 3:所有的葉節點都是空節點(即 null),並且是黑色的。
- 性質 4:每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的路徑上不會有兩個連續的紅色節點)
- 性質 5:從任一節點到其子樹中每個葉子節點的路徑都包含相同數量的黑色節點。