![Java容器學(xué)習(xí)筆記Set接口及其實(shí)現(xiàn)類的相關(guān)知識(shí)總結(jié)計(jì)算機(jī)Java_第1頁(yè)](http://file4.renrendoc.com/view/88f1a07d4f7782afa4410a0dea18983f/88f1a07d4f7782afa4410a0dea18983f1.gif)
![Java容器學(xué)習(xí)筆記Set接口及其實(shí)現(xiàn)類的相關(guān)知識(shí)總結(jié)計(jì)算機(jī)Java_第2頁(yè)](http://file4.renrendoc.com/view/88f1a07d4f7782afa4410a0dea18983f/88f1a07d4f7782afa4410a0dea18983f2.gif)
![Java容器學(xué)習(xí)筆記Set接口及其實(shí)現(xiàn)類的相關(guān)知識(shí)總結(jié)計(jì)算機(jī)Java_第3頁(yè)](http://file4.renrendoc.com/view/88f1a07d4f7782afa4410a0dea18983f/88f1a07d4f7782afa4410a0dea18983f3.gif)
![Java容器學(xué)習(xí)筆記Set接口及其實(shí)現(xiàn)類的相關(guān)知識(shí)總結(jié)計(jì)算機(jī)Java_第4頁(yè)](http://file4.renrendoc.com/view/88f1a07d4f7782afa4410a0dea18983f/88f1a07d4f7782afa4410a0dea18983f4.gif)
![Java容器學(xué)習(xí)筆記Set接口及其實(shí)現(xiàn)類的相關(guān)知識(shí)總結(jié)計(jì)算機(jī)Java_第5頁(yè)](http://file4.renrendoc.com/view/88f1a07d4f7782afa4410a0dea18983f/88f1a07d4f7782afa4410a0dea18983f5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
,value是個(gè)Object,value是個(gè)Object類型的常量,所以在iteratoequals相同,則hashCode的返回值應(yīng)該是相同的。Lull元素,因?yàn)闊o(wú)法可靠地將null參數(shù)及返回值與不存在的元總共有11個(gè)位置,目前有4個(gè)位置已經(jīng)存放,即40%的空間已被 ),在Set接口中沒(méi)有新增任何方法,所有方法均來(lái)自其父接口。它無(wú)法提供像List中按位存取的方法。在數(shù)學(xué)上一個(gè)集合有三個(gè)性質(zhì):確定性,互異性,無(wú)序性。HashSet的特點(diǎn)、實(shí)現(xiàn)機(jī)制及使用方法intnewCapacity){16.Entry[]oldTLinkedHashSet。c)LinkedHashSetintnewCapacity){16.Entry[]oldTLinkedHashSet。c)LinkedHashSet的為PRESENT的常量,由于用到了散列函數(shù),因此其存取速度是=newTable.length;35.for(intj=0是一個(gè)Object類型的名為PRESENT的常量,由于用到了散列函數(shù),因此其存取速度是非??旆椒?,那么HashSet的實(shí)現(xiàn)是非常簡(jiǎn)單的。首先需要了解一下散列或者哈希的用法。我們知道,當(dāng)數(shù)據(jù)量很大時(shí)hash函數(shù)計(jì)算的結(jié)果將會(huì)),已經(jīng)存放,即40%的空間已被使用。使用,將會(huì)進(jìn)行一次再散列(再哈希之前的散列表(數(shù)組)將被刪除,新增加的散列表是之前散列表長(zhǎng)度的2倍,最大值為Integer.MAX_VALUE。負(fù)載因子越高,內(nèi)存使用率越大,元素的尋找時(shí)間越長(zhǎng)。負(fù)載因子越低,內(nèi)存使用率越小,元素的尋找時(shí)間越短。從上圖可以看出,當(dāng)哈希值相同時(shí),將存放在同一個(gè)位置,使用鏈表方式依次鏈接下去。(面試官問(wèn)到這個(gè)問(wèn)題,當(dāng)時(shí)我的回答是再哈希,其實(shí)我并不知道HashSet真正是怎么實(shí)現(xiàn)的,我只知道在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時(shí)學(xué)習(xí)過(guò)再哈希,就是這個(gè)哈希表很滿時(shí)需要重新建立哈希表,以便于有說(shuō)出來(lái)再哈希的過(guò)程,以及哈希值相同時(shí)到底如何存放,所以……~~o(>_<)o~~)。為了說(shuō)明HashSet在Java中確實(shí)如上實(shí)現(xiàn),下面附上JDK中兩個(gè)重要方法的源碼:(下面源碼來(lái)自于碼來(lái)自于HashMap,原因是HashSet是基于HashMap實(shí)現(xiàn)的)t底層也是使用數(shù)組實(shí)現(xiàn)的,它的優(yōu)點(diǎn)是存取效率很高,當(dāng)負(fù)載因子ue則相同,即上面說(shuō)的重復(fù)。如果hashCodet底層也是使用數(shù)組實(shí)現(xiàn)的,它的優(yōu)點(diǎn)是存取效率很高,當(dāng)負(fù)載因子ue則相同,即上面說(shuō)的重復(fù)。如果hashCode不同那么一定eaterthancurrentcapacityunlessHashMap實(shí)現(xiàn)的。所以在實(shí)現(xiàn)上是比較簡(jiǎn)單的,是根據(jù)dumMAXIMUM_CAPACITY,thismethoddoesnotr方法中使用的是HashMap的r方法中使用的是HashMap的keySet方法進(jìn)行迭代的。,當(dāng)哈希值相同時(shí),將存放在同一個(gè)位置,使用鏈表方式依次鏈接下ldTable.length;18.if(oldCapaciHashMap實(shí)現(xiàn)的。所以在實(shí)現(xiàn)上是比較簡(jiǎn)單的,是根據(jù)dumHashSet共實(shí)現(xiàn)了5個(gè)構(gòu)造方法,對(duì)外提供了4個(gè)構(gòu)造方法。這些方法在api中均可看到詳細(xì)從HashSet的特點(diǎn)及實(shí)現(xiàn)上看,我們知道在不需要放入重復(fù)數(shù)據(jù)并且不關(guān)心放入順序以及元素是否要求有序的情況下,我們沒(méi)有任何理由不選擇使用HashSet。另外HashSet是允許放空值那么那么HashSet是如何保證不重復(fù)的?下面一個(gè)例子說(shuō)明:然為了實(shí)現(xiàn)線程安全,這不是一個(gè)唯一的方法。TreeSet的特?zé)o法提供像然為了實(shí)現(xiàn)線程安全,這不是一個(gè)唯一的方法。TreeSet的特?zé)o法提供像List中按位存取的方法。在數(shù)學(xué)上一個(gè)集合有三個(gè)性hSet中有個(gè)loadFactor(負(fù)載因子),對(duì)于上圖所示的。當(dāng)我們需要在多線程并發(fā)環(huán)境下使用時(shí)可以考慮使用這個(gè)類,當(dāng)簡(jiǎn)單說(shuō)明一下上面的例子:上面已經(jīng)提到HashSet里面放的元素是不允許重復(fù)的,那么什么樣的元素是重復(fù)呢,重復(fù)的定上面例子中實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的類Name類,并且重寫(xiě)了equals方法與hashCode方法,那么重hashCode方法,將返回值改為Namen1=newName("W","x");Namen2=newName("W","y");也就是說(shuō)上面代碼會(huì)輸出true。equals相同,則hashCode的返回值應(yīng)該是相同的。equals相同,則hashCode的返回值應(yīng)該是相同的。L的是一個(gè)Object類型的常量。從注釋中可以看出保證不重復(fù)的ashCode方法,將返回值改為returnprime*re特點(diǎn),并且是線程安全的類。b)CopyOnWriteArra當(dāng)然我們實(shí)現(xiàn)equals方法時(shí)是要根據(jù)hashCode方法實(shí)現(xiàn)的,必須建立關(guān)聯(lián)關(guān)系,也就是說(shuō)正LinkedHashSet的特點(diǎn)、實(shí)現(xiàn)機(jī)制及使用方法LinkedHashSet保證了按照插入順序有序,繼承自HashSet,沒(méi)有實(shí)現(xiàn)新的可以使用的方法。由上面JDK代碼可以看出LinkedHashSet底層是使用LinkedHashMap實(shí)現(xiàn)的。所以在實(shí)現(xiàn)上是比較簡(jiǎn)單的,是根據(jù)dummy這個(gè)參數(shù),我們不需要傳入,選擇構(gòu)造的是HashSet由于LinkedHashSet繼承自HashSet,并且沒(méi)有提供額外的供使用的方法,所以在使用時(shí)與HashSet基本相同,只是面臨的是選擇的問(wèn)題。我們根據(jù)需要選擇不同的數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)我們CopyOnWriteArraySet的特點(diǎn)、實(shí)現(xiàn)機(jī)制及使用方法(newTable);25.table=newTable;2無(wú)法提供像List中按位存取的方法。在數(shù)學(xué)上一個(gè)集合有三個(gè)性(newTable);25.table=newTable;2無(wú)法提供像List中按位存取的方法。在數(shù)學(xué)上一個(gè)集合有三個(gè)性那種類型的Set的一個(gè)標(biāo)準(zhǔn)。(我不是專家,我只是菜鳥(niǎo),歡迎拍使用方法:由于LinkedHashSet繼承自HashSet在實(shí)現(xiàn)時(shí)使用了寫(xiě)時(shí)拷貝的方法以及使用重入鎖實(shí)現(xiàn)了線程的同步,底層使用這仍然面臨的是一個(gè)選擇的問(wèn)題,HashSet底層也是使用數(shù)組實(shí)現(xiàn)的,它的優(yōu)點(diǎn)是存取效率很高,當(dāng)負(fù)載因子很小時(shí),幾乎可以達(dá)到O(1)級(jí)的存取速度,但是它不是線程安全的。當(dāng)我們需TreeSet的特點(diǎn)、實(shí)現(xiàn)機(jī)制及使用方法TreeSet中所放的元素是有序的,并且元素是不能重復(fù)的。在在JDK源碼中有下面一段注釋:就是說(shuō)要加入的元素要實(shí)現(xiàn)Comparable接口。的問(wèn)題,我們是否要保證插入的元素有序(不是按插入順序有序,而是根據(jù)compareTo的返回值排序)是我們選擇使用那種類型的Set的一個(gè)標(biāo)準(zhǔn)。(我不是專家,我只是菜鳥(niǎo),歡迎拍磚)使用方法:由于LinkedHashSet繼承自HashSet使用方法:由于LinkedHashSet繼承自HashSeteArr
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 親子教育項(xiàng)目居間合同樣本
- 電影院裝修服務(wù)合同范本
- 農(nóng)藥購(gòu)銷合同樣本
- 三農(nóng)村公共環(huán)境治理體系建設(shè)指南
- 生產(chǎn)管理實(shí)務(wù)操作流程詳解
- 網(wǎng)絡(luò)教育技術(shù)運(yùn)用與發(fā)展趨勢(shì)研究報(bào)告與指導(dǎo)書(shū)
- 鋼化玻璃采購(gòu)合同書(shū)
- 購(gòu)買豆腐的合同
- 2025年陽(yáng)江b2貨運(yùn)上崗證模擬考試
- 小學(xué)三年級(jí)上冊(cè)口算練習(xí)500題
- 娛樂(lè)直播行業(yè)發(fā)展趨勢(shì)
- 國(guó)際學(xué)校幼升小面試試題
- 火電廠消防培訓(xùn)課件
- 精神障礙患者的生活技能培訓(xùn)
- 《系統(tǒng)解剖學(xué)》期末考試復(fù)習(xí)題庫(kù)大全-下(多選題匯總)
- 廈門弘愛(ài)醫(yī)院硼中子俘獲治療系統(tǒng)項(xiàng)目環(huán)境影響報(bào)告
- 酒店招標(biāo)文件內(nèi)容
- 員工調(diào)薪申請(qǐng)單模板
- 《中國(guó)高考評(píng)價(jià)體系》解讀(化學(xué)學(xué)科)
- 大學(xué)課程中的可持續(xù)發(fā)展目標(biāo)(SDGs)教育-第1篇
- 企業(yè)人員測(cè)評(píng)理論與方法
評(píng)論
0/150
提交評(píng)論