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