Vector是java容器中很重要很基础的一部分,在面试中,容器相关的底层问题简直不要太多,那么对于其底层的东西,还是需要结合源码(此处版本:jdk8)进行分析。
一 :数据结构
Vector底层数据结构核心其实是一个可以自动扩容的Object数组,实际上跟ArrayList的没啥区别,Vector的基本操作都是基于这个Object数组进行操作而实现的。
二:内存模型/内存分配
这里我贴上一张我自己画的图,很简单
三 : 继承关系
从源码上看,它继承了AbstractList抽象父类,实现了List(规定了List的操作规范)、RandomAccess(可随机访问)、Cloneable(可拷贝)、Serializable(可序列化)几个接口;这可以从源码中看的到:(嗯,和ArrayList的没啥区别)这里关于RandomAccess和Serializable可以去看我之前的ArrayList那篇文章,里面有讲
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
四:Vector的核心成员变量
直接附上源码:
protected Object[] elementData;
protected int elementCount;
protected int capacityIncrement;
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
elementData:Vector的数组缓冲区,也就是数据结构那里讲到的、Vector底层的那个Object数组;、Vector的容量就是elementData的长度;
MAX_ARRAY_SIZE:elementData的最大值。
elementCount:这个是Vector真正包含的元素的个数,它和容量是两个概念;
capacityIncrement:这个是Vector进行扩容时所增加的容量数,如果进行构造的时候没有指定capacityIncrement的值,则在进行扩容时扩容为双倍容量。
五:构造函数
指定elementCount和capacityIncrement参数构造:
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
thi