久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

Java集合類(lèi)常見(jiàn)面試知識(shí)點(diǎn)總結(jié)-創(chuàng)新互聯(lián)

Java集合類(lèi)學(xué)習(xí)總結(jié)

這篇總結(jié)是基于之前博客內(nèi)容的一個(gè)整理和回顧。

民和網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

這里先簡(jiǎn)單地總結(jié)一下,更多詳細(xì)內(nèi)容請(qǐng)參考我的專(zhuān)欄:深入淺出Java核心技術(shù)?

https://blog.csdn.net/column/details/21930.html

里面有包括Java集合類(lèi)在內(nèi)的眾多Java核心技術(shù)系列文章。

以下總結(jié)不保證全對(duì),如有錯(cuò)誤,還望能夠指出,謝謝。

最后,如果想要更好地完成這部分內(nèi)容的學(xué)習(xí),建議大家還是去看一下原文。

Colletion,iterator,comparable

一般認(rèn)為Collection是最上層接口,但是hashmap實(shí)際上實(shí)現(xiàn)的是Map接口。iterator是迭代器,是實(shí)現(xiàn)iterable接口的類(lèi)必須要提供的一個(gè)東西,能夠使用for(i : A) 這種方式實(shí)現(xiàn)的類(lèi)型能提供迭代器,以前有一個(gè)enumeration,現(xiàn)在早棄用了。

List

List接口下的實(shí)現(xiàn)類(lèi)有ArrayList,linkedlist,vector等等,一般就是用這兩個(gè),用法不多說(shuō),老生常談。

ArrayList的擴(kuò)容方式是1.5倍擴(kuò)容,這樣擴(kuò)容避免2倍擴(kuò)容可能浪費(fèi)空間,是一種折中的方案。 另外他不是線(xiàn)程安全,vector則是線(xiàn)程安全的,它是兩倍擴(kuò)容的。

linkedlist是雙鏈表,并且很坑的一點(diǎn)是,Java里的linkedlist自帶按索引訪(fǎng)問(wèn)的api,結(jié)果我沒(méi)用過(guò),面試的時(shí)候被問(wèn)到答錯(cuò)了,導(dǎo)致我美團(tuán)直接涼涼= =。

除此之外還有一個(gè)copyonwritelist,用于線(xiàn)程安全的場(chǎng)景。

Map

map永遠(yuǎn)都是重頭戲。

1 hashmap是數(shù)組和鏈表的組合結(jié)構(gòu),數(shù)組是一個(gè)Entry數(shù)組,entry是k-V鍵值對(duì)類(lèi)型,所以一個(gè)entry數(shù)組存著很entry節(jié)點(diǎn),一個(gè)entry的位置通過(guò)key的hashcode方法,再進(jìn)行hash(移位等操作),最后與表長(zhǎng)-1進(jìn)行相與操作,其實(shí)就是取hash值到的后n - 1位,n代表表長(zhǎng)是2的n次方。

2 hashmap的默認(rèn)負(fù)載因子是0.75,閾值是16 * 0.75 = 12;初始長(zhǎng)度為16;

3 hashmap的增刪改查方式比較簡(jiǎn)單,都是遍歷,替換。有一點(diǎn)要注意的是key相等時(shí),替換元素,不相等時(shí)連成鏈表。

4 除此之外,1.8jdk改進(jìn)了hashmap,當(dāng)鏈表上的元素個(gè)數(shù)超過(guò)8個(gè)時(shí)自動(dòng)轉(zhuǎn)化成紅黑樹(shù),節(jié)點(diǎn)變成樹(shù)節(jié)點(diǎn),以提高搜索效率和插入效率到logn。

5 還有一點(diǎn)值得一提的是,hashmap的擴(kuò)容操作,由于hashmap非線(xiàn)程安全,擴(kuò)容時(shí)如果多線(xiàn)程并發(fā)進(jìn)行操作,則可能有兩個(gè)線(xiàn)程分別操作新表和舊表,導(dǎo)致節(jié)點(diǎn)成環(huán),查詢(xún)時(shí)會(huì)形成死鎖。chm避免了這個(gè)問(wèn)題。

6 另外,擴(kuò)容時(shí)會(huì)將舊表元素移到新表,原來(lái)的版本移動(dòng)時(shí)會(huì)有rehash操作,每個(gè)節(jié)點(diǎn)都要rehash,非常不方便,而1.8改成另一種方式,對(duì)于同一個(gè)index下的鏈表元素,由于一個(gè)元素的hash值在擴(kuò)容后只有兩種情況,要么是hash值不變,要么是hash值變?yōu)樵瓉?lái)值+2^n次方,這是因?yàn)楸黹L(zhǎng)翻倍,所以hash值取后n位,第一位要么是0要么是1,所以hash值也只有兩種情況。這兩種情況的元素分別加到兩個(gè)不同的鏈表。這兩個(gè)鏈表也只需要分別放到新表的兩個(gè)位置即可,是不是很酷。

7 最后有一個(gè)比較冷門(mén)的知識(shí)點(diǎn),hashmap1.7版本鏈表使用的是節(jié)點(diǎn)的頭插法,擴(kuò)容時(shí)轉(zhuǎn)移鏈表仍然使用頭插法,這樣的結(jié)果就是擴(kuò)容后鏈表會(huì)倒置,而hashmap.1.8在插入時(shí)使用尾插法,擴(kuò)容時(shí)使用頭插法,這樣可以保證順序不變。

CHM

concurrenthashmap也稍微提一下把,chm1.7使用分段鎖來(lái)控制并發(fā),每個(gè)segment對(duì)應(yīng)一個(gè)segmentmask,通過(guò)key的hash值相與這個(gè)segmentmask得到segment位置,然后在找到具體的entry數(shù)組下標(biāo)。

所以chm需要維護(hù)多個(gè)segment,每個(gè)segment對(duì)應(yīng)一段數(shù)組。分段鎖使用的是reetreetlock可重入鎖實(shí)現(xiàn),查詢(xún)時(shí)不加鎖。

1.8則放棄使用分段鎖,改用cas+synchronized方式實(shí)現(xiàn)并發(fā)控制,查詢(xún)時(shí)不加鎖,插入時(shí)如果沒(méi)有沖突直接cas到成功為止,有沖突則使用synchronized插入。

Set

set就是hashmap將value固定為一個(gè)object,只存key元素,包裝成一個(gè)entry即可,其他不變。

Linkedhashmap

在原來(lái)hashmap基礎(chǔ)上將所有的節(jié)點(diǎn)依據(jù)插入的次序另外連成一個(gè)鏈表。用來(lái)保持順序,可以使用它實(shí)現(xiàn)lru緩存,當(dāng)訪(fǎng)問(wèn)命中時(shí)將節(jié)點(diǎn)移到隊(duì)頭,當(dāng)插入元素超過(guò)長(zhǎng)度時(shí),刪除隊(duì)尾元素即可。

使用的時(shí)候先繼承l(wèi)inkedhashmap或者直接使用linkedhashmap作為成員變量,然后重寫(xiě)removeEldestEntry方法即可,注意傳入size參數(shù),判斷當(dāng)元素個(gè)數(shù)超過(guò)size時(shí)返回true,表示可以刪除就行了。

collections和Arrays工具類(lèi)

兩個(gè)工具類(lèi)分別操作集合和數(shù)組,可以進(jìn)行常用的排序,合并等操作。

comparable和comparator

實(shí)現(xiàn)comparable接口可以讓一個(gè)類(lèi)的實(shí)例互相使用compareTo方法進(jìn)行比較大小,可以自定義比較規(guī)則,comparator則是一個(gè)通用的比較器,比較指定類(lèi)型的兩個(gè)元素之間的大小關(guān)系。

這個(gè)東西還是很好用的,做算法題的時(shí)候經(jīng)常會(huì)用到自定義的排序方式。

treemap和treeset

主要是基于紅黑樹(shù)實(shí)現(xiàn)的兩個(gè)數(shù)據(jù)結(jié)構(gòu),可以保證key序列是有序的,獲取sortedset就可以順序打印key值了。其中涉及到紅黑樹(shù)的插入和刪除,調(diào)整等操作,比較復(fù)雜,這里就不細(xì)說(shuō)了。

另外我們也可以獲取逆序的set集合。

其他

集合類(lèi)要學(xué)的東西其實(shí)還很多,但是面試的東西可能就這么多了把。當(dāng)然可能還有一些遺漏,但是大部分我在面試中能遇到的問(wèn)題都已經(jīng)包含進(jìn)去了。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

分享題目:Java集合類(lèi)常見(jiàn)面試知識(shí)點(diǎn)總結(jié)-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://sd-ha.com/article30/decopo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、微信小程序、定制網(wǎng)站、App開(kāi)發(fā)、ChatGPT、網(wǎng)站營(yíng)銷(xiāo)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)