這篇文章將為大家詳細(xì)講解有關(guān)如何進(jìn)行Vector源碼解析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比港閘網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式港閘網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋港閘地區(qū)。費用合理售后完善,10年實體公司更值得信賴。
在Java的集合類中,除了ArrayList外,還有一些其它的集合類它們底層也是采用數(shù)組的方式實現(xiàn)的,例如Vector集合類。那它們在使用上或者說在底層的實現(xiàn)方式上有何不同的呢?接下來我們將詳細(xì)來分析一下Vector集合的相關(guān)知識。
下面直接來分析Vector的底層源碼,來對比一下Vector集合與ArrayList集合在底層有何不同。我們還是和ArrayList集合一樣還是先看一下Vector集合的初始化,也就是構(gòu)造方法。
初始化
雖然上面是3個不同的構(gòu)造方法,但是我們通過方法的調(diào)用關(guān)系就可得知,如果我們使用無參的構(gòu)造方法來創(chuàng)建Vector對象時,那么上述的3個方法都會依次執(zhí)行。并且我們知道上述方法中最核心的方法也就是給數(shù)組初始化的代碼就是第3個構(gòu)造方法。因為我們已經(jīng)分析過了ArrayList中的源碼,所以我們可以很容易得出以下結(jié)論:
Vector集合和ArrayList一樣當(dāng)集合第一次執(zhí)行默認(rèn)初始化時,會將底層數(shù)組的大小設(shè)置為10
Vector集合與ArrayList不同的地方就是ArrayList集合當(dāng)我們使用無參構(gòu)造方法創(chuàng)建對象時,并不會為數(shù)組執(zhí)行默認(rèn)初始化,第一次默認(rèn)初始化動作發(fā)生在ArrayList集合第一次調(diào)用add()方法的時候。而在Vector集合中,當(dāng)我們使用無參構(gòu)造方法創(chuàng)建對象時,則會立即執(zhí)行默認(rèn)初始化。
下面我們分析一下Vector集合的add()方法的實現(xiàn)邏輯。
動態(tài)分配
上述的代碼貌似我們很眼熟啊有沒有,沒錯上述的代碼邏輯,其實和ArrayList源碼邏輯幾乎一樣。唯一的區(qū)別就是Vector集合和ArrayList集合的動態(tài)分配方式不一樣 。在ArrayList那篇文章中,我們已經(jīng)知道了,當(dāng)?shù)讓訑?shù)組已經(jīng)達(dá)到最大容量時,會自動創(chuàng)建一個比原數(shù)組大1.5倍的數(shù)組。那么在上述代碼中我們發(fā)現(xiàn),Vector集合的底層擴展規(guī)律是會創(chuàng)建一個是原數(shù)組2倍的數(shù)組來存儲元素。這也就是Vector集合與ArrayList集合的區(qū)別之一。既然是區(qū)別之一,那么就一定還有其它的區(qū)別,我們發(fā)現(xiàn)在add()方法中添加了synchronized同步關(guān)鍵字,這就說明Vector集合是一個線程安全的集合類,這也是與ArrayList集合的區(qū)別之一,因為ArrayList集合并不是一個線程安全的集合類。
注意事項
因為Vector集合底層也是采用數(shù)組的方式實現(xiàn)的,所以它的弊端基本和ArrayList集合一樣 ,這里就不在做過多的介紹了。但有一點要注意,因為Vector集合是線程安全的集合類,所以我們在開發(fā)多線程時,可以直接使用而無需要添加額外的同步的代碼,就可保證線程的安全。但是,如果我們開發(fā)時不是在多線程環(huán)境中運行的,如果我們繼續(xù)使用Vector集合時,就會造成我們程序的性能降低,這是因為Vector集合底層使用了ynchronized同步關(guān)鍵字,所以每次執(zhí)行add()方法時,都有頻繁的執(zhí)行獲取鎖和釋放鎖操作,這樣就會在無形之中,影響程序的性能。所以,我們在日常的開發(fā)中,如果不是在多線程環(huán)境中使用List集合的話,那么我們推薦使用ArrayList或LinkedList集合,因為它們不是線程安全的集合類,所以也就不會頻繁的執(zhí)行獲取鎖和釋放鎖操作,所以相比Vector集合,程序的運行效率較高。
關(guān)于如何進(jìn)行Vector源碼解析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
文章名稱:如何進(jìn)行Vector源碼解析
URL網(wǎng)址:http://www.chinadenli.net/article4/ieocie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)站收錄、虛擬主機、全網(wǎng)營銷推廣、微信小程序、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)