ThinkinginJava之Set接口、HashSet源碼學(xué)習(xí).doc

ThinkinginJava之Set接口、HashSet源碼學(xué)習(xí).doc

ID:50830755

大?。?3.95 KB

頁數(shù):4頁

時(shí)間:2020-03-15

ThinkinginJava之Set接口、HashSet源碼學(xué)習(xí).doc_第1頁
ThinkinginJava之Set接口、HashSet源碼學(xué)習(xí).doc_第2頁
ThinkinginJava之Set接口、HashSet源碼學(xué)習(xí).doc_第3頁
ThinkinginJava之Set接口、HashSet源碼學(xué)習(xí).doc_第4頁
資源描述:

《ThinkinginJava之Set接口、HashSet源碼學(xué)習(xí).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、ThinkinginJava之Set接口、HashSet源碼學(xué)習(xí)  文章主要討論Set接口的設(shè)計(jì)、以及Set接口的一個(gè)實(shí)現(xiàn)類HashSet的設(shè)計(jì)細(xì)節(jié)。對(duì)于他們的思考,同樣是基于源碼學(xué)習(xí)的?! et接口設(shè)計(jì)通過閱讀API和源碼我們可以知道Java中的Set和數(shù)學(xué)行直觀的“集”的概念是相同的。Set的最大特點(diǎn)也就是不允許在其中放入重復(fù)的元素。Set集合最多只能包含一個(gè)null元素。至于這種特點(diǎn)是如何實(shí)現(xiàn)的,我們先不考究。在其具體子類HashSet里我們?cè)谟懻撝V州java培訓(xùn)咨詢QQ:707552864,544627560  Set接口源碼解

2、析  首先看看Set的源碼吧。  [java]viewplaincopy  packagecom.kiritor;  /**  Set源碼研究*/  importjava.util.Iterator;  publicinterfaceSetextendsCollection{  intsize();  booleanisEmpty();  booleancontains(Objecto);  Iteratoriterator();  Object[]toArray();  T[]toArray(T[]a);  booleanadd(Ee); 

3、 booleanremove(Objecto);  booleancontainsAll(Collectionc);  booleanaddAll(Collectionc);  booleanretainAll(Collectionc);  booleanremoveAll(Collectionc);  voidclear();  booleanequals(Objecto);  inthashCode();  }  可以看出的是Set繼承至Collection,而且通過對(duì)比還可以知道的是,Set提供的方法和Colllection指定的方法是

4、完全一樣的。那么它的不重復(fù)是如何體現(xiàn)的呢?這里我們通過研究其具體實(shí)現(xiàn)類HashSet來說明?! ashSet類實(shí)現(xiàn)  同樣的對(duì)于HashSet類的具體源碼筆者就不貼出來了。這里我們只是簡要的對(duì)其的方法做一些分析。首先看看HashSet類的頭部吧?! ?duì)于序列化、Cloneable接口筆者就不細(xì)說了。這里HashSet繼承AbstactSet這個(gè)中間抽象類,并且這個(gè)抽象類又繼承至AbstractCollection。這里簡要的說說自己的理解。在前一章對(duì)ArrayList的學(xué)習(xí)中,筆者并未就這方面給予解釋。AbstractCollection其

5、實(shí)更像是實(shí)現(xiàn)List,Set的共同的方法,而AbstactSetAbstactList更像是提供給Set、List各自特有方法的實(shí)現(xiàn)?! ?、底層實(shí)現(xiàn)  通過其源碼的觀察可以知道的是HashSet的底層實(shí)現(xiàn)是基于HashMap的。它不保證Set的迭代順序而且不保證該順序永久不變。HashSet的實(shí)現(xiàn)較為的簡單,其相關(guān)的操作都是通過直接調(diào)用底層HashMap的相關(guān)方法來完成?! java]viewplaincopy  //底層使用HashMap來保存HashSet中所有元素?! rivatetransientHashMapmap;  //定

6、義一個(gè)虛擬的Object對(duì)象作為HashMap的value,將此對(duì)象定義為staticfinal?! rivatestaticfinalObjectPRESENT=newObject();  2、構(gòu)造方法  [java]viewplaincopy  *默認(rèn)的無參構(gòu)造器,構(gòu)造一個(gè)空的HashSet?! ?實(shí)際底層會(huì)初始化一個(gè)空的HashMap,并使用默認(rèn)初始容量為16和加載因子0.75?! ?/  publicHashSet(){  map=newHashMap();  }  /**  *構(gòu)造一個(gè)包含指定collection中的元素的新set

7、?! ?  *實(shí)際底層使用默認(rèn)的加載因子0.75和足以包含指定  *collection中所有元素的初始容量來創(chuàng)建一個(gè)HashMap?! ?@paramc其中的元素將存放在此set中的collection?! ?/  publicHashSet(Collectionc){  map=newHashMap(Math.max((int)(c.size()/.75f)+1,16));  addAll(c);  }  /**  *以指定的initialCapacity和loadFactor構(gòu)造一個(gè)空的HashSet。  *  *實(shí)際底層以相應(yīng)的參數(shù)構(gòu)

8、造一個(gè)空的HashMap?! ?@paraminitialCapacity初始容量。  *@paramloadFactor加載因子?! ?/  publicHash

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。