java集合類及并發(fā)包的實(shí)現(xiàn)

java集合類及并發(fā)包的實(shí)現(xiàn)

ID:34424810

大?。?7.50 KB

頁(yè)數(shù):13頁(yè)

時(shí)間:2019-03-06

java集合類及并發(fā)包的實(shí)現(xiàn)_第1頁(yè)
java集合類及并發(fā)包的實(shí)現(xiàn)_第2頁(yè)
java集合類及并發(fā)包的實(shí)現(xiàn)_第3頁(yè)
java集合類及并發(fā)包的實(shí)現(xiàn)_第4頁(yè)
java集合類及并發(fā)包的實(shí)現(xiàn)_第5頁(yè)
資源描述:

《java集合類及并發(fā)包的實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、集合類Collection接口Collection的實(shí)現(xiàn)主要有List,Set,兩者之間的主要區(qū)別是,List支持重復(fù),Set不支持,List的實(shí)現(xiàn)包括:ArrayList,LinkedList,Vector,Stacl.;Set的實(shí)現(xiàn)包括:HashSet,TreeSetCollection的主要方法:add(E):添加元素remove(E):刪除get(index):得到contains(E):含有iterator():得到遍歷器ArrayList實(shí)現(xiàn)方式創(chuàng)建ArrayList默認(rèn)構(gòu)造器通過(guò)調(diào)用ArrayList(int)來(lái)完成創(chuàng)建,傳入值10

2、。代碼:super()調(diào)用了默認(rèn)構(gòu)造器,是空的。這段代碼最重要的就是,創(chuàng)建了一個(gè)Object數(shù)組,并賦給了當(dāng)前elementData屬性,數(shù)組大小是傳入的initialCapacity,因此newArrayList()將會(huì)創(chuàng)建一個(gè)大小10的數(shù)組。插入對(duì)象:add(E)插入對(duì)象時(shí),會(huì)根據(jù)Object數(shù)組當(dāng)前已有元素屬性+1得到一個(gè)minCapacity,如果大于Object數(shù)組大小,則先將Object數(shù)組賦給另一個(gè)數(shù)組,然后得到一個(gè)新的數(shù)組大小=當(dāng)前數(shù)組大小*1.5+1,如果這個(gè)值小于minCapacity,則minCapacity為新數(shù)組的大小,

3、然后使用Arrays.copyOf來(lái)產(chǎn)生新的數(shù)組。add(E,index)方法:這個(gè)在指定位置插入值,首先要確保位置存在且Object數(shù)組大小足夠,插入后,所有index之后的元素都要向后移一位,這就是多一次復(fù)制數(shù)組的代價(jià)其他插入方法:addAll(Collection),addAll(int,Collection)刪除對(duì)象:remove(E)判斷E是否為null,是則遍歷所有元素,null是否存在,存在,則所有其后元素向前復(fù)制一位,并將最后的設(shè)為null(釋放)E不是null,則通過(guò)E的equals來(lái)

4、判斷對(duì)象是否存在。獲取單個(gè)對(duì)象:get(int)使用ArrayList最好的地方,get(int)直接得到數(shù)組位置的元素(判斷int的范圍)遍歷對(duì)象:iterator()ArrayList中的內(nèi)部類Itr,hasNext(),就是當(dāng)前位置和數(shù)組元素大小比較,相等f(wàn)alse,否則truenext()方法,會(huì)比較創(chuàng)建此Iterator時(shí)的modCount屬性和當(dāng)前的modCount屬性,如果不相等,說(shuō)明在遍歷時(shí)發(fā)生了改變Object數(shù)組元素的行為(add,remove),拋出ConcurrentModificationException,相等,則取下

5、一個(gè)元素(get方法),取不到,拋出IndexOutOfBoundsException注意:ArrayList基于數(shù)組實(shí)現(xiàn),無(wú)容量限制增加元素時(shí)可能擴(kuò)大數(shù)組,但是刪除時(shí)不會(huì)減小數(shù)組大小。對(duì)于非null元素,用equals方法判斷相等線程非安全LinkedList實(shí)現(xiàn)方式基于雙向鏈表的實(shí)現(xiàn),內(nèi)部有Entry類,代表元素,有element屬性代表value,next屬性指向下一個(gè)Entry,previous屬性指向上一個(gè)元素,這種機(jī)制有利于快速實(shí)現(xiàn)集合中元素的移動(dòng)所有的方法基于鏈表機(jī)制,不做解釋非線程安全。Vector數(shù)組實(shí)現(xiàn)。與ArrayList相

6、似不同處:add(E)方法在擴(kuò)容時(shí),如果capacityIncrement屬性大于0,則數(shù)組大小為現(xiàn)有size+capacityIncrement,如果capacityIncrement<=0,則大小為現(xiàn)有size*2所以Vector可以通過(guò)傳入capacityIncrement來(lái)控制容量的擴(kuò)充add(E),remove(E),get(int)方法都是synchronized的線程安全的。Stack繼承與Vector,實(shí)現(xiàn)了LIFO,HashSet基于HashMap實(shí)現(xiàn)add(E):通過(guò)HashMap的put(Object,Object)方法,將

7、要添加的元素作為key,value傳入一個(gè)之前已創(chuàng)建的Object其他方法都是通過(guò)HashMap來(lái)實(shí)現(xiàn)的非線程安全TreeSet基于TreeMap實(shí)現(xiàn),支持排序,非線程安全Map接口并發(fā)包(java.util.concurrent)ConcurrentHashMap線程安全的HashMap實(shí)現(xiàn)ConcurrentHashMap()和HashMap一樣,有initialCapacity屬性,loadFactor屬性,還多一個(gè)concurrencyLevel屬性。三個(gè)屬性默認(rèn)值是,16,0.75和16以下方式計(jì)算ssize的值intsshift=0;

8、intssize=1;while(ssize

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

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

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(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)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。