java ArrayList和Vector的區(qū)別詳解
ArrayList和Vector的區(qū)別
相同點(diǎn):
1、ArrayList和Vector都是繼承了相同的父類和實(shí)現(xiàn)了相同的接口
2、底層都是數(shù)組實(shí)現(xiàn)的
3、初始默認(rèn)長(zhǎng)度都為10。
不同點(diǎn):
1、同步性:
Vector中的public方法多數(shù)添加了synchronized關(guān)鍵字,以確保方法同步,也即是Vector線程安全,ArrayList線程不安全。
2、擴(kuò)容不同
內(nèi)部屬性不同,這可能是導(dǎo)致擴(kuò)容方式不同的原因所在。
ArrayList有兩個(gè)屬性,存儲(chǔ)數(shù)據(jù)的數(shù)組elementData,和存儲(chǔ)記錄數(shù)目的size。
Vector有三個(gè)屬性,存儲(chǔ)數(shù)據(jù)的數(shù)組elementData,存儲(chǔ)記錄數(shù)目的elementCount,還有擴(kuò)展數(shù)組大小的擴(kuò)展因子capacityIncrement。
ArrayList的擴(kuò)展方法
//jdk1.8.0_91 private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); }
可以看出,在滿足擴(kuò)容條件時(shí),擴(kuò)展后數(shù)組大小為原數(shù)組長(zhǎng)度的1.5倍與傳遞參數(shù)中較大者
Vector的擴(kuò)展方法
//jdk1.8.0_91 private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); elementData = Arrays.copyOf(elementData, newCapacity); }
可以看出,當(dāng)擴(kuò)容因子大于0時(shí),新數(shù)組長(zhǎng)度為原數(shù)組長(zhǎng)度+擴(kuò)容因子,否則子新數(shù)組長(zhǎng)度為原數(shù)組長(zhǎng)度的2倍。 將上面生成的新數(shù)組長(zhǎng)度與傳遞的參數(shù)長(zhǎng)度作比較,較大者為最終的新長(zhǎng)度。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
SpringBoot整合POI實(shí)現(xiàn)Excel文件讀寫操作
EasyExcel是一個(gè)基于Java的、快速、簡(jiǎn)潔、解決大文件內(nèi)存溢出的Excel處理工具,這篇文章主要介紹了SpringBoot整合POI實(shí)現(xiàn)Excel文件讀寫操作,首先準(zhǔn)備環(huán)境進(jìn)行一系列操作,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-10-10Arthas-java程序運(yùn)行時(shí)debug工具使用
這篇文章主要介紹了Arthas-java程序運(yùn)行時(shí)debug工具使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11