首页 > 代码库 > JDK源码学习系列06----Vector
JDK源码学习系列06----Vector
JDK源码学习系列06----Vector
1.Vector简介
Vector的内部是数组实现的,它和ArrayList非常相似,最大的不同就是 Vector 是线程安全(同步)的。
public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.SerializableVector继承于AbstractList,实现了List, RandomAccess, Cloneable,java.io.Serializable这些接口。
Vector 继承了AbstractList,实现了List ,支持相关的添加、删除、修改、遍历等功能。
Vector 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在Vector 中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。
Vector 实现了Cloneable接口,即实现clone()函数。它能被克隆。
2.Vector的成员变量
protected Object[] elementData;//内部实现数组 protected int elementCount;//vector内容的实际长度 protected int capacityIncrement;//容量递增值 private static final long serialVersionUID = -2767605614048989439L;//序列id
public Vector(int initialCapacity, int capacityIncrement) { super(); if (initialCapacity < 0)//若容量递增值小于0,则抛出异常 throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = http://www.mamicode.com/new Object[initialCapacity];//elementData数组,容量为initialCapacity>
4.Vector的成员函数
很多成员函数都用synchronized关键字修饰了的,即表示是同步的,线程安全的。关于synchronized关键字,请见:java synchronized 关键字 。
public synchronized void copyInto(Object[] anArray) {//把Vector复制到anArray数组中 System.arraycopy(elementData, 0, anArray, 0, elementCount);//数组的复制都是用的System.arraycopy(),Arrays.copyof()的内部也是用的System.arraycopy(). } public synchronized void trimToSize() {//把容量缩小到刚好等于vector的实际长度 modCount++;//!!线程安全的类的源码中也有统计结构变化次数的modCount int oldCapacity = elementData.length; if (elementCount < oldCapacity) { elementData = http://www.mamicode.com/Arrays.copyOf(elementData, elementCount);>5.总结
a.Vector的内部是数组实现的。
b.Vector是线程安全(同步)的。
c.Vector默认长度为10,扩容时需要参考容量增幅值,若容量增幅值大于0,则扩容为 原容量+容量增幅值;若容量增幅值小于 0,则扩容为 2*原容量。若根据容量增幅值扩容后 还是小于传入的新容量参数值,则容量扩为传入的新参数。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。