日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

集合之TreeMap源码分析,简单介绍什么是红黑树,SortedMap和NavigableMap之间的关系和区别

發(fā)布時(shí)間:2025/3/19 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 集合之TreeMap源码分析,简单介绍什么是红黑树,SortedMap和NavigableMap之间的关系和区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

TreeMap底層實(shí)現(xiàn)

1. TreeMap底層實(shí)現(xiàn)是紅黑樹,并且樹的節(jié)點(diǎn)是內(nèi)部類Entry類型

2. 紅黑樹的定義

① 每個(gè)節(jié)點(diǎn)是黑色或紅色;②根節(jié)點(diǎn)是黑色;③所有的葉節(jié)點(diǎn)是黑色,不是真正的葉節(jié)點(diǎn),而是每個(gè)葉節(jié)點(diǎn)為NIL的子節(jié)點(diǎn),不知道為什么要定義葉節(jié)點(diǎn)NIL,既然每個(gè)葉節(jié)點(diǎn)都可以有NIL的子節(jié)點(diǎn),有什么好說的呢???④紅節(jié)點(diǎn)的子節(jié)點(diǎn)不能是紅節(jié)點(diǎn);⑤從一個(gè)節(jié)點(diǎn)到葉子節(jié)點(diǎn)的所有路徑包含相同黑節(jié)點(diǎn)數(shù)。

其實(shí),我們只要記住三點(diǎn)即可。①紅黑樹的根節(jié)點(diǎn)是黑色;②紅節(jié)點(diǎn)的子節(jié)點(diǎn)不能是紅節(jié)點(diǎn);③一個(gè)節(jié)點(diǎn)到葉子節(jié)點(diǎn)的所有路徑包含相同的黑節(jié)點(diǎn)數(shù)。

?

3. TreeMap類繼承結(jié)構(gòu)圖

?

4. SortedMap接口顧名思義就是定義了一些關(guān)于排序有關(guān)的方法,這也是TreeMap和HashMap之間有區(qū)別的地方,方法說明如下圖。

?

5. NavigableMap顧名思義就是導(dǎo)航Map,也就是能迅速定位到某些key或Map,比如搜索比某個(gè)key大的key等,如下圖。

5.1 通過TreeMap中higherKeyCeilingKey的具體實(shí)現(xiàn)分析它們之間的區(qū)別,ceilingKey內(nèi)部調(diào)用了getCeilingEntry(),higherKey內(nèi)部則調(diào)用了getHigherEntry(),如下圖。

?

?

5.2 所以,higherKey是尋找大于當(dāng)前key的key,而ceiling尋找大于等于當(dāng)前key的key。

?

6. TreeMap對(duì)象的創(chuàng)建

6.1 默認(rèn)構(gòu)造函數(shù)——指定內(nèi)部比較器為null

6.2 指定比較器的構(gòu)造函數(shù)

6.3 傳入一個(gè)Map對(duì)象(如果是SortedMap實(shí)例,會(huì)調(diào)用SortedMap對(duì)象作為參數(shù)的構(gòu)造方法)的構(gòu)造函數(shù)——也指定比較器為null

6.4 傳入一個(gè)排序的SortedMap對(duì)象的構(gòu)造函數(shù)——得到比較器并賦值

6.5 總結(jié):對(duì)于TreeMap,要么指定比較器,要么傳入一個(gè)SortedMap對(duì)象,間接指定比較器,或者key自身實(shí)現(xiàn)comparable接口,比如String和Integer類。

?

7. put方法往TreeMap添加元素

?

8. get方法從TreeMap查詢、取出某元素——二叉樹搜索方式

?

9 remove方法刪除TreeMap中某個(gè)元素

?

10. TreeMap其它常用方法

10.1 containsKey——也是調(diào)用getEntry方法進(jìn)行二叉樹搜索

10.2 containsValue——二叉樹中序遍歷方式

10.3 clear方法清空TreeMap——直接把根節(jié)點(diǎn)置為null,不像LinkedList把每個(gè)節(jié)點(diǎn)的前后節(jié)點(diǎn)都斷開連接

10.4 TreeMap最有特性的一個(gè)方法——descendingMap

?

11 TreeSet——內(nèi)部是NavigableMap對(duì)象

11.1 有四種構(gòu)造方法,和TreeMap不太一樣

11.2 可以通過descendingSet得到降序的Set

總結(jié)

以上是生活随笔為你收集整理的集合之TreeMap源码分析,简单介绍什么是红黑树,SortedMap和NavigableMap之间的关系和区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。