摘要:擴(kuò)容不同內(nèi)部屬性不同,這可能是導(dǎo)致擴(kuò)容方式不同的原因所在。有兩個屬性,存儲數(shù)據(jù)的數(shù)組,和存儲記錄數(shù)目的。將上面生成的新數(shù)組長度與傳遞的參數(shù)長度作比較,較大者為最終的新長度。
相同點:
1、ArrayList和Vector都是繼承了相同的父類和實現(xiàn)了相同的接口
2、底層都是數(shù)組實現(xiàn)的
3、初始默認(rèn)長度都為10。
不同點:
1、同步性:
Vector中的public方法多數(shù)添加了synchronized關(guān)鍵字,以確保方法同步,也即是Vector線程安全,ArrayList線程不安全。
2、擴(kuò)容不同
內(nèi)部屬性不同,這可能是導(dǎo)致擴(kuò)容方式不同的原因所在。
ArrayList有兩個屬性,存儲數(shù)據(jù)的數(shù)組elementData,和存儲記錄數(shù)目的size。?
Vector有三個屬性,存儲數(shù)據(jù)的數(shù)組elementData,存儲記錄數(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ò)容條件時,擴(kuò)展后數(shù)組大小為(原數(shù)組長度的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ù)組長度+擴(kuò)容因子,否則子新數(shù)組長度為原數(shù)組長度的2倍。?將上面生成的新數(shù)組長度與傳遞的參數(shù)長度作比較,較大者為最終的新長度。
微信公眾號:志哥 (ID: zhige-me)
期待與你相遇,一同成長前行!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65228.html
摘要:線程不安全底層數(shù)據(jù)結(jié)構(gòu)是鏈表。的默認(rèn)初始化容量是,每次擴(kuò)容時候增加原先容量的一半,也就是變?yōu)樵瓉淼谋秳h除元素時不會減少容量,若希望減少容量則調(diào)用它不是線程安全的。 前言 聲明,本文用得是jdk1.8 前一篇已經(jīng)講了Collection的總覽:Collection總覽,介紹了一些基礎(chǔ)知識。 現(xiàn)在這篇主要講List集合的三個子類: ArrayList 底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組。線程不安全 ...
摘要:底層使用的是雙向鏈表數(shù)據(jù)結(jié)構(gòu)之前為循環(huán)鏈表,取消了循環(huán)??焖匐S機(jī)訪問就是通過元素的序號快速獲取元素對象對應(yīng)于方法。而接口就是用來標(biāo)識該類支持快速隨機(jī)訪問。僅僅是起標(biāo)識作用。,中文名為雙端隊列。不同的是,是線程安全的,內(nèi)部使用了進(jìn)行同步。 前言 學(xué)習(xí)情況記錄 時間:week 2 SMART子目標(biāo) :Java 容器 記錄在學(xué)習(xí)Java容器 知識點中,關(guān)于List的需要重點記錄的知識點。...
摘要:集合的長度的是可變的,可以根據(jù)元素的增加而增長。如果元素個數(shù)不是固定的推薦用集合。線程安全,效率低。相對查詢慢線程安全的相對增刪慢數(shù)組結(jié)構(gòu)底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快。線程不安全,效率高。 1_對象數(shù)組的概述和使用 A:案例演示 需求:我有5個學(xué)生,請把這個5個學(xué)生的信息存儲到數(shù)組中,并遍歷數(shù)組,獲取得到每一個學(xué)生信息。 import net.allidea.bean.Stu...
摘要:中所有方法都是直接或者間接同步的,所以是線程安全的即多個線程操作同一個對象時是線程安全的,但是只有一個線程操作時考慮到同步控制會耗費系統(tǒng)資源所以效率低。中的所有方法都是線程非同步的,但有多個線程操作時是不安全的。 雖是讀書筆記,但是如轉(zhuǎn)載請注明出處http://segmentfault.com/blog/exploring/ ..拒絕伸手復(fù)制黨 容器之間的區(qū)別通常歸結(jié)為:由什么在背...
摘要:是哈希表實現(xiàn)的,中的數(shù)據(jù)是無序的,可以放入,但只能放入一個,兩者中的值都不能重復(fù),就如數(shù)據(jù)庫中唯一約束。四和的相同點和區(qū)別相同兩者都是基于哈希表實現(xiàn)的內(nèi)部也都是通過單鏈表解決沖突問題同樣實現(xiàn)了序列化和克隆接口區(qū)別繼承的父類不同。 一.Arraylist與LinkedList有什么區(qū)別? 1、ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),因為地址連續(xù),一旦數(shù)據(jù)存儲好了,查詢操作效率...
閱讀 550·2023-04-26 00:33
閱讀 3570·2021-11-24 09:39
閱讀 3067·2021-09-22 15:34
閱讀 2365·2019-08-23 18:07
閱讀 2941·2019-08-23 18:04
閱讀 3747·2019-08-23 16:06
閱讀 2922·2019-08-23 15:27
閱讀 1638·2019-08-23 14:32