摘要:在學(xué)習(xí)的實(shí)現(xiàn)類是基于實(shí)現(xiàn)的前,先來介紹下接口及其下的子接口先看下的架構(gòu)圖如上圖是映射接口,中存儲(chǔ)的內(nèi)容是鍵值對(duì)。是繼承于的接口。中的內(nèi)容是排序的鍵值對(duì),排序的方法是通過比較器。
Map
在學(xué)習(xí)Set(Set的實(shí)現(xiàn)類是基于Map實(shí)現(xiàn)的)、HashMap、TreeMap前,先來介紹下Map接口及其下的子接口.
先看下Map的架構(gòu)圖:
如上圖:
(01) Map 是映射接口,Map中存儲(chǔ)的內(nèi)容是鍵值對(duì)(key-value)。
(02) AbstractMap 是繼承于Map的抽象類,它實(shí)現(xiàn)了Map中的大部分API。其它Map的實(shí)現(xiàn)類可以通過繼承AbstractMap來減少重復(fù)編碼。
(03) SortedMap 是繼承于Map的接口。SortedMap中的內(nèi)容是排序的鍵值對(duì),排序的方法是通過比較器(Comparator)。
(04) NavigableMap 是繼承于SortedMap的接口。相比于SortedMap,NavigableMap有一系列的導(dǎo)航方法;如"獲取大于/等于某對(duì)象的鍵值對(duì)"、“獲取小于/等于某對(duì)象的鍵值對(duì)”等等。
(05) TreeMap 繼承于AbstractMap,且實(shí)現(xiàn)了NavigableMap接口;因此,TreeMap中的內(nèi)容是“有序的鍵值對(duì)”!
(06) HashMap 繼承于AbstractMap,但沒實(shí)現(xiàn)NavigableMap接口;因此,HashMap的內(nèi)容是“鍵值對(duì),但不保證次序”!
(07) Hashtable 雖然不是繼承于AbstractMap,但它繼承于Dictionary(Dictionary也是鍵值對(duì)的接口),而且也實(shí)現(xiàn)Map接口;因此,Hashtable的內(nèi)容也是“鍵值對(duì),也不保證次序”。但和HashMap相比,Hashtable是線程安全的,而且它支持通過Enumeration去遍歷。
(08) WeakHashMap 繼承于AbstractMap。它和HashMap的鍵類型不同,WeakHashMap的鍵是“弱鍵”(僅自身對(duì)key有引用,沒有其他的引用了)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69628.html
摘要:實(shí)際運(yùn)行上面程序?qū)⒖吹匠绦蜉敵?,這是因?yàn)榕袛鄡蓚€(gè)對(duì)象相等的標(biāo)準(zhǔn)除了要求通過方法比較返回之外,還要求兩個(gè)對(duì)象的返回值相等。通常來說,所有參與計(jì)算返回值的關(guān)鍵屬性,都應(yīng)該用于作為比較的標(biāo)準(zhǔn)。 1.HashSet概述: HashSet實(shí)現(xiàn)Set接口,由哈希表(實(shí)際上是一個(gè)HashMap實(shí)例)支持。它不保證set 的迭代順序;特別是它不保證該順序恒久不變。此類允許使用null元素。Hash...
摘要:而中,采用數(shù)組鏈表紅黑樹實(shí)現(xiàn),當(dāng)鏈表長度超過閾值時(shí),將鏈表轉(zhuǎn)換為紅黑樹,這樣大大減少了查找時(shí)間。到了,當(dāng)同一個(gè)值的節(jié)點(diǎn)數(shù)不小于時(shí),不再采用單鏈表形式存儲(chǔ),而是采用紅黑樹,如下圖所示。 一. HashMap概述 在JDK1.8之前,HashMap采用數(shù)組+鏈表實(shí)現(xiàn),即使用鏈表處理沖突,同一hash值的節(jié)點(diǎn)都存儲(chǔ)在一個(gè)鏈表里。但是當(dāng)位于一個(gè)桶中的元素較多,即hash值相等的元素較多時(shí),通過...
摘要:源碼剖析的源碼如下加入了比較詳細(xì)的注釋序列版本號(hào)基于該數(shù)組實(shí)現(xiàn),用該數(shù)組保存數(shù)據(jù)中實(shí)際數(shù)據(jù)的數(shù)量帶容量大小的構(gòu)造函數(shù)。該方法被標(biāo)記了,調(diào)用了系統(tǒng)的代碼,在中是看不到的,但在中可以看到其源碼。 ArrayList簡介 ArrayList是基于數(shù)組實(shí)現(xiàn)的,是一個(gè)動(dòng)態(tài)數(shù)組,其容量能自動(dòng)增長,類似于C語言中的動(dòng)態(tài)申請(qǐng)內(nèi)存,動(dòng)態(tài)增長內(nèi)存。ArrayList不是線程安全的,只能用在單線程環(huán)境下,多...
摘要:在閱讀源碼之前,我們先對(duì)的整體實(shí)現(xiàn)進(jìn)行大致說明實(shí)際上是通過雙向鏈表去實(shí)現(xiàn)的。獲取的最后一個(gè)元素由于是雙向鏈表而表頭不包含數(shù)據(jù)。實(shí)際上是判斷雙向鏈表的當(dāng)前節(jié)點(diǎn)是否達(dá)到開頭反向迭代器獲取下一個(gè)元素。 第1部分 LinkedList介紹 LinkedList簡介 LinkedList 是一個(gè)繼承于AbstractSequentialList的雙向鏈表。它也可以被當(dāng)作堆棧、隊(duì)列或雙端隊(duì)列進(jìn)行操...
摘要:一出現(xiàn)背景線程不安全的因?yàn)槎嗑€程環(huán)境下,使用進(jìn)行操作會(huì)引起死循環(huán),導(dǎo)致利用率接近,所以在并發(fā)情況下不能使用。是由數(shù)組結(jié)構(gòu)和數(shù)組結(jié)構(gòu)組成。用來表示需要進(jìn)行的界限值。也是,這使得能夠讀取到最新的值而不需要同步。 一、出現(xiàn)背景 1、線程不安全的HashMap 因?yàn)槎嗑€程環(huán)境下,使用Hashmap進(jìn)行put操作會(huì)引起死循環(huán),導(dǎo)致CPU利用率接近100%,所以在并發(fā)情況下不能使用HashMap。...
閱讀 2590·2021-09-26 10:13
閱讀 6010·2021-09-08 10:46
閱讀 698·2019-08-30 15:53
閱讀 2972·2019-08-29 16:13
閱讀 2766·2019-08-26 12:23
閱讀 3495·2019-08-26 11:24
閱讀 1102·2019-08-23 18:09
閱讀 1038·2019-08-23 17:08