Vector源码分析

本文详细分析了Java中Vector类的源码,包括其数据结构、内存模型、继承关系、核心成员变量、构造函数、添加、插入、删除、查询搜索等操作。Vector虽然同步但性能较低,适合多线程环境,但通常推荐使用ArrayList替代。
摘要由CSDN通过智能技术生成

Vector是java容器中很重要很基础的一部分,在面试中,容器相关的底层问题简直不要太多,那么对于其底层的东西,还是需要结合源码(此处版本:jdk8)进行分析。

一 :数据结构

Vector底层数据结构核心其实是一个可以自动扩容的Object数组,实际上跟ArrayList的没啥区别,Vector的基本操作都是基于这个Object数组进行操作而实现的。

二:内存模型/内存分配

这里我贴上一张我自己画的图,很简单
Vector内存模型

三 : 继承关系

从源码上看,它继承了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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值