美文网首页
jdk源码之Vector

jdk源码之Vector

作者: 薛晨 | 来源:发表于2016-09-09 12:36 被阅读24次

概要

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来控制容量的扩充。

相关文章

  • jdk源码之Vector

    概要 类继承关系java.lang.Objectjava.util.AbstractCollectionja...

  • system.arraycopy native源码解析

    之前在分析ArrayList和Vector源码的时候,发现Sun JDK版本中的ArrayList和Vector大...

  • 源码阅读之Vector

    源码阅读是基于JDK7,本篇主要涉及Vector常用方法源码分析。 1.概述Vector实现了一个增长型的Obje...

  • Vector源码分析

    Vector源码分析 jdk7和jdk8不变 与Arraylist扩容方式不同 原始长度为10,代码如下 扩容为2...

  • Stack简介

    Stack简介 Stack基于Vector实现,支持LIFO 后进先出 源码分析 jdk1.7.0_71 默认构造...

  • JDK源码分析(5)Vector

    JDK版本 Vector简介 首先,Vector 是一个可增长的数组(和 ArrayList 类似),能够用索引直...

  • Collection-Vector

    jdk版本:1.8.0_77参考文档:jdk 1.8 docs Vector类图 Vector特点 Vector对...

  • JDK1.8源码阅读--Vector

    Vector继承AbstractList抽象类,实现List, RandomAccess, Clone...

  • Vector及LinkedList源码解析

    1、本文主要内容 Vector及LinkedList介绍 Vector源码解析 LinkedList源码解析 总结...

  • Java List接口整理

    java源码分析之List接口以及ArrayList、LinkedList、Stack、Vector等实现类 Li...

网友评论

      本文标题:jdk源码之Vector

      本文链接:https://www.haomeiwen.com/subject/gfmeettx.html