ArrayList和Vector的區(qū)別
相同點(diǎn):
1、ArrayList和Vector都是繼承了相同的父類和實(shí)現(xiàn)了相同的接口
2、底層都是數(shù)組實(shí)現(xiàn)的
3、初始默認(rèn)長度都為10。
不同點(diǎn):
1、同步性:
Vector中的public方法多數(shù)添加了synchronized關(guān)鍵字,以確保方法同步,也即是Vector線程安全,ArrayList線程不安全。
2、擴(kuò)容不同
內(nèi)部屬性不同,這可能是導(dǎo)致擴(kuò)容方式不同的原因所在。
ArrayList有兩個(gè)屬性,存儲數(shù)據(jù)的數(shù)組elementData,和存儲記錄數(shù)目的size。
Vector有三個(gè)屬性,存儲數(shù)據(jù)的數(shù)組elementData,存儲記錄數(shù)目的elementCount,還有擴(kuò)展數(shù)組大小的擴(kuò)展因子capacityIncrement。
ArrayList的擴(kuò)展方法
//jdk1.8.0_91private 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ù)組長度的1.5倍與傳遞參數(shù)中較大者
Vector的擴(kuò)展方法
//jdk1.8.0_91private 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ù)組長度為原數(shù)組長度+擴(kuò)容因子,否則子新數(shù)組長度為原數(shù)組長度的2倍。 將上面生成的新數(shù)組長度與傳遞的參數(shù)長度作比較,較大者為最終的新長度。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點(diǎn)
疑難解答
圖片精選