首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Java 學習筆記:Vector 內部實現與動態擴容機制解析

     編輯:PHP 相關知識

Vector 簡介

java.util.Vector 是線程安全的動態陣列,底層由 Object[] elementData 存儲,支持自動擴容。與 ArrayList 主要區別在於所有公共方法均加 synchronized 關鍵字。

構造函數

// 指定初始容量,增量為 0(即倍增)
public Vector(int initialCapacity) {
    this(initialCapacity, 0);
}

// 指定初始容量與擴容增量
public Vector(int initialCapacity, int capacityIncrement) {
    if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity);
    this.elementData = new Object[initialCapacity];
    this.capacityIncrement = capacityIncrement;
}

capacityIncrement > 0 時每次擴容增加固定量;≤ 0 時採用倍增策略(newCapacity = oldCapacity * 2)。

核心方法解析

add(E e) — 尾部添加

public synchronized boolean add(E e) {
    modCount++;
    ensureCapacityHelper(elementCount + 1); // 確保容量
    elementData[elementCount++] = e;
    return true;
}

ensureCapacityHelper(int minCapacity) — 擴容核心

private void ensureCapacityHelper(int minCapacity) {
    int oldCapacity = elementData.length;
    if (minCapacity > oldCapacity) {
        Object[] oldData = elementData;
        int newCapacity = (capacityIncrement > 0)
            ? (oldCapacity + capacityIncrement)
            : (oldCapacity * 2);
        if (newCapacity < minCapacity) newCapacity = minCapacity;
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
}

關鍵點:

  • Arrays.copyOf 完成陣列複製與擴容,時間複雜度 O(n)。
  • modCount 用於快速失效迭代器。

其他常用操作

Vector v = new Vector<>(4);
v.add("Test0"); v.add("Test1"); v.add("Test0"); v.add("Test2"); v.add("Test2");

v.remove("Test0"); // 刪除首個匹配元素
v.remove(0);       // 按索引刪除

int size = v.size(); // 當前元素數量
for (int i = 0; i < size; i++) {
    System.out.println(v.get(i));
}

知識點總結

  1. synchronized:方法級鎖,保證多線程安全,但有性能開銷;單線程場景優先用 ArrayList。
  2. Arrays.copyOf:高效陣列複製工具,底層調用 System.arraycopy。
  3. 構造函數重載:Java 允許同名構造函數參數列表不同,PHP 需用 __construct 配合 func_get_args 模擬。
  4. Vector 本質:線程安全的動態陣列,擴容策略可配置,適合舊代碼維護或簡單多線程場景。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved