JAVA Vector集合原始碼分析
阿新 • • 發佈:2022-03-09
Vector集合
一、Vecotr的基本介紹
package com.hspedu.list_; import java.util.Vector; /** * @author DL5O * @version 1.0 */ @SuppressWarnings("all") public class Vector_ { public static void main(String[] args) { //這裡是無參構造 Vector vector = new Vector(); for (int i = 0; i < 10; i++) { vector.add(i); } vector.add(200); } }
二、Vector和ArrayList的比較
底層結構 | 版本 | 執行緒安全(同步)效率 | 擴容倍數 | |
---|---|---|---|---|
ArrayList | 可變陣列Object[] | jdk1.2 | 不安全,效率高 | 如有引數就按照引數的1.5倍擴容 如果是無參 1.第一次擴容10 2.第二次開始按1.5倍 |
Vector | 可變陣列Object[] | jdk1.0 | 安全,效率不高 | 如果是無參,預設10,滿後,就按2倍擴容 如果指定大小,則每次直接按兩倍進行擴容 |
第一步:呼叫構造器
第二步:呼叫add方法,確定陣列的修改次數
第三步:呼叫過載了的方法,判斷是否要擴容,不需要擴容則把元素,存入到陣列中,並且當天元素個數+1
- 幾乎和ArrayList原始碼一致
第四步:如果需要擴容則呼叫grow方法,進行相關操作,確定擴容大小,把舊陣列的元素拷貝到新陣列中,讓elementData指向這個新陣列即可
- 擴容數量為原來陣列的長度的兩倍
-
如果是有參構造器
- 則每次擴容的數量為原來陣列的兩倍長度
- 且如果設定了capacityIncrement的值,那麼每次都擴容該大小