Java 2源碼解讀

Java 2源碼解讀

ID:41131555

大?。?9.50 KB

頁數(shù):5頁

時間:2019-08-17

Java 2源碼解讀_第1頁
Java 2源碼解讀_第2頁
Java 2源碼解讀_第3頁
Java 2源碼解讀_第4頁
Java 2源碼解讀_第5頁
資源描述:

《Java 2源碼解讀》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、Java2源碼解讀:java.util.ArrayListArrayList是List接口的一個可變長數(shù)組實現(xiàn)。實現(xiàn)了所有List接口的操作,并允許存儲null值。除了沒有進(jìn)行同步,ArrayList基本等同于Vector。在Vector中幾乎對所有的方法都進(jìn)行了同步,但ArrayList僅對writeObject和readObject進(jìn)行了同步,其它比如add(Object)、remove(int)等都沒有同步。1.存儲ArrayList使用一個Object的數(shù)組存儲元素。privatetransientObjectelementData[];ArrayList實現(xiàn)了J

2、ava.io.Serializable接口,這兒的transient標(biāo)示這個屬性不需要自動序列化。下面會在writeObject()方法中詳細(xì)講解為什么要這樣作。2.add和removepublicbooleanadd(Objecto){ensureCapacity(size+1);//IncrementsmodCount!!elementData[size++]=o;returntrue;}注意這兒的ensureCapacity()方法,它的作用是保證elementData數(shù)組的長度可以容納一個新元素。在“自動變長機制”中將詳細(xì)講解。publicObjectremove

3、(intindex){RangeCheck(index);modCount++;ObjectoldValue=elementData[index];intnumMoved=size-index-1;if(numMoved>0)System.arraycopy(elementData,index+1,elementData,index,numMoved);elementData[--size]=null;//LetgcdoitsworkreturnoldValue;}RangeCheck()的作用是進(jìn)行邊界檢查。由于ArrayList采用一個對象數(shù)組存儲元素,所以在刪除一個

4、元素時需要把后面的元素前移。刪除一個元素時只是把該元素在elementData數(shù)組中的引用置為null,具體的對象的銷毀由垃圾收集器負(fù)責(zé)。modCount的作用將在下面的“iterator()中的同步”中說明。注:在前移時使用了System提供的一個實用方法:arraycopy(),在本例中可以看出System.arraycopy()方法可以對同一個數(shù)組進(jìn)行操作,這個方法是一個native方法,如果對同一個數(shù)組進(jìn)行操作時,會首先把從源部分拷貝到一個臨時數(shù)組,在把臨時數(shù)組的元素拷貝到目標(biāo)位置。3.自動變長機制在實例化一個ArrayList時,你可以指定一個初始容量。這個容量

5、就是elementData數(shù)組的初始長度。如果你使用:ArrayListlist=newArrayList();則使用缺省的容量:10。publicArrayList(){this(10);}ArrayList提供了四種add()方法,publicbooleanadd(Objecto)publicvoidadd(intindex,Objectelement)publicbooleanaddAll(Collectionc)publicbooleanaddAll(intindex,Collectionc)在每一種add()方法中,都首先調(diào)用了一個ensureCapacity(

6、intminiCapacity)方法,這個方法保證elementData數(shù)組的長度不小于miniCapacity。ArrayList的自動變長機制就是在這個方法中實現(xiàn)的。publicvoidensureCapacity(intminCapacity){modCount++;intoldCapacity=elementData.length;if(minCapacity>oldCapacity){ObjectoldData[]=elementData;intnewCapacity=(oldCapacity*3)/2+1;if(newCapacity

7、newCapacity=minCapacity;elementData=newObject[newCapacity];System.arraycopy(oldData,0,elementData,0,size);}}從這個方法實現(xiàn)中可以看出ArrayList每次擴容,都擴大到原來大小的1.5倍。每種add()方法的實現(xiàn)都大同小異,下面給出add(Object)方法的實現(xiàn):publicbooleanadd(Objecto){ensureCapacity(size+1);//IncrementsmodCount!!elementD

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

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

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