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