Java中treemap原理介紹

Java中treemap原理介紹

長(zhǎng)沙一度軟件培訓(xùn)      2022-04-18 22:21:01     12

Java中treemap原理介紹,一、TreeMap介紹TreeMap是一個(gè)有序的key-value集合,它是通過紅黑樹實(shí)現(xiàn)的。TreeMap繼承于AbstractMap,所以它是一個(gè)Map,即一個(gè)

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

一、TreeMap介紹

TreeMap是一個(gè)有序的key-value集合,它是通過紅黑樹實(shí)現(xiàn)的。

TreeMap繼承于AbstractMap,所以它是一個(gè)Map,即一個(gè)key-value集合。

TreeMap實(shí)現(xiàn)了NavigableMap接口,意味著它支持一系列的導(dǎo)航方法。比如返回有序的key集合。

TreeMap實(shí)現(xiàn)了Cloneable接口,意味著它能被克隆。

TreeMap實(shí)現(xiàn)了java.io.Serializable接口,意味著它支持序列化。

TreeMap基于紅黑樹(Red-Black tree)實(shí)現(xiàn)。該映射根據(jù)其鍵的自然順序進(jìn)行排序,或者根據(jù)創(chuàng)建映射時(shí)提供的Comparator進(jìn)行排序,具體取決于使用的構(gòu)造方法。

TreeMap的基本操作containsKey、get、put和remove的時(shí)間復(fù)雜度是log(n)。

另外,TreeMap是非同步的。它的iterator方法返回的迭代器是fail-fastl的。

二、紅黑樹(Red Black Tree)

是一種自平衡二叉查找樹

(1)檢索效率O(log n)

(2)紅黑樹的五點(diǎn)規(guī)定:

a每個(gè)節(jié)點(diǎn)都只能是紅色或者黑色

b根節(jié)點(diǎn)是黑色

c每個(gè)葉節(jié)點(diǎn)(NIL節(jié)點(diǎn),空節(jié)點(diǎn))是黑色的。

d從每個(gè)葉子到根的所有路徑上不能有兩個(gè)連續(xù)的紅色節(jié)點(diǎn)。

e從任一節(jié)點(diǎn)到其每個(gè)葉子的所有路徑都包含相同數(shù)目的黑色節(jié)點(diǎn)。

三、TreeMap使用舉例

TreeMap默認(rèn)按照key遞增排序

public?class?Main?{?public?static?void?main(String[]?args)?{?TreeMap?treeMap?=?new?TreeMap<>();?TreeMap?treeMap1?=?new?TreeMap<>();?treeMap.put(7,?"h");?treeMap.put(8,?"g");?treeMap.put(9,?"f");?treeMap.put(10,?"e");?treeMap.put(14,?"a");?treeMap.put(1,?"w");?treeMap.put(2,?"v");?treeMap.put(3,?"u");?treeMap.put(11,?"d");?treeMap.put(12,?"c");?treeMap.put(13,?"b");?treeMap.put(4,?"k");?treeMap.put(5,?"j");?treeMap.put(6,?"i");?System.out.println("----------------------*------------------------------");?while?(treeMap.size()?!=?0)?{?//treemap自動(dòng)按照key進(jìn)行遞增排序?System.out.println(treeMap.firstEntry().getKey()?+?"?-?"?+?treeMap.firstEntry().getValue());?treeMap1.put(treeMap.firstEntry().getValue(),?treeMap.firstEntry().getKey());?treeMap.remove(treeMap.firstKey());?}?System.out.println("----------------------*------------------------------");?while?(treeMap1.size()?!=?0)?{?//treemap自動(dòng)按照key進(jìn)行遞增排序?System.out.println(treeMap1.firstEntry().getKey()?+?"?-?"?+?treeMap1.firstEntry().getValue());?treeMap1.remove(treeMap1.firstKey());?}?System.out.println("----------------------*------------------------------");?}}得到結(jié)果:----------------------*------------------------------1?-?w2?-?v3?-?u4?-?k5?-?j6?-?i7?-?h8?-?g9?-?f10?-?e11?-?d12?-?c13?-?b14?-?a----------------------*------------------------------a?-?14b?-?13c?-?12d?-?11e?-?10f?-?9g?-?8h?-?7i?-?6j?-?5k?-?4u?-?3v?-?2w?-?1

以上就是長(zhǎng)沙一度軟件培訓(xùn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java中treemap原理介紹”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。