jdk源碼之Vector

概要

public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{
}

實現

Vector是從JDK1.2就已提供的List實現,與ArrayList一樣,也是基于Object數組的方式來實現的。

  • 創(chuàng)建
    默認創(chuàng)建大小為10的Object數組,并將capacityIncrement設置為0。
public Vector() {    this(10);}

public Vector(int initialCapacity) {    this(initialCapacity, 0);}

public Vector(int initialCapacity, int capacityIncrement) {    
  super();    
  if (initialCapacity < 0)        
    throw new IllegalArgumentException("Illegal Capacity: "+                                           initialCapacity);    
  this.elementData = new Object[initialCapacity];    
  this.capacityIncrement = capacityIncrement;
}
  • 添加元素 add(E)
public synchronized boolean add(E e) {    
  modCount++;    
  ensureCapacityHelper(elementCount + 1);    
  elementData[elementCount++] = e;    
  return true;
}

add方法加了synchronized關鍵字,因此,此方法是線程安全的。

private void ensureCapacityHelper(int minCapacity) {    
  // overflow-conscious code    
  if (minCapacity - elementData.length > 0)        
    grow(minCapacity);
}

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);}

Vector擴大數組的方式與ArrayList不同,若capacityIncrement > 0, 則數組大小擴大為現有size加上capacityIncrement,若capacityIncrement < 0, 則擴大為現有size的兩倍。這種容量控制策略比ArrayList更為可控。

  • 刪除 remove(Object)

除其調用的removeElement方法上有synchronized關鍵字外,和ArrayList完全相同。

  • 獲取 get(int)

除該方法上有synchronized關鍵字外,和ArrayList完全相同。

注:

  1. Vector 是基于 Synchronized 實現的線程安全的 ArrayList, 但在插入元素時容量擴充與ArrayList不同,可通過傳入capacityIncrement來控制容量的擴充。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光劍書架上的書閱讀 4,184評論 2 8
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,679評論 18 399
  • 一、基本數據類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數值 對于byte類型而言...
    龍貓小爺閱讀 4,451評論 0 16
  • 借我一個少年 借我碎片 借我瞻前與顧后 借我淡然如暮年 借我后天長成的先天 借我變若不曾改變 借我素淡的世故和明白...
    檸C小姐閱讀 427評論 5 1
  • 不知道明天和意外那個先來!聽著不好聽,可說的是那么的實在。最近聽到或見到一個個年輕人被病魔折磨或逝去,對活著的人是...
    南山臺子閱讀 559評論 1 0

友情鏈接更多精彩內容