jdk源码之Vector

概要

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

实现

Vector是从JDK1.2就已提供的List实现,与ArrayList一样,也是基于Object数组的方式来实现的。

  • 创建
    默认创建大小为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来控制容量的扩充。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光剑书架上的书阅读 3,957评论 2 8
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,291评论 0 16
  • 借我一个少年 借我碎片 借我瞻前与顾后 借我淡然如暮年 借我后天长成的先天 借我变若不曾改变 借我素淡的世故和明白...
    柠C小姐阅读 394评论 5 1
  • 不知道明天和意外那个先来!听着不好听,可说的是那么的实在。最近听到或见到一个个年轻人被病魔折磨或逝去,对活着的人是...
    南山台子阅读 510评论 1 0