Vector源码专题

1,Vector的概述

public class Vector
  extends AbstractList
  implements List, RandomAccess, Cloneable, Serializable

Vector,来自于JDK1.0 的古老集合类,继承自 AbstractList,实现了 List 接口 ,底层是数组结构,元素可重复,有序(存放顺序),支持下标索引访问,允许null元素。

该类当中所有方法的实现都是同步的,方法采用了synchronized修饰,数据安全,效率低!可以看成ArrayList的同步版本,但是并不完全相同,比如迭代器。

实现了 RandomAccess标志性接口,这意味着这个集合支持 快速随机访问 策略,那么使用传统for循环的方式遍历数据会优于用迭代器遍历数据,即使用get(index)方法获取数据相比于迭代器遍历更加快速!

还实现了Cloneable、Serializable两个标志性接口,所以Vector支持克隆、序列化。

2,Vector的源码解析

Vector的方法的原理和ArrayList非常相似,因此如果了解AarrayList那么理解Vector将会很简单!对于某些方法,本文在ArrayList集合中会有详细介绍,因此强烈建议先学习ArrayList:Java的ArrayList集合源码深度解析以及应用介绍。

Vector的底层数据结构就是一个数组,数组元素的类型为Object类型,对Vector的所有操作底层都是基于数组的。

初始容量:

调用空构造器时,立即初始化为10个容量的数组,也可以指定初始容量。

加载因子:

1,即存放数据时,如果存放数据后的容量大于底层数组的容量,那么首先扩容。

扩容增量:

新容量默认增加原容量的1倍,但是也可以在构造器指定扩容时的容量增量!如果新容量还是小于最小容量,则新容量还是等于最小容量!

2.1 主要类属性

相比于ArrayList,属性还是很简单的,多了一个capacityIncrement。

/**
 * 存放元素的底层容器,就是一个数组,当前数组的长度就是Vector的容量
 */
protected Object[] elementData;

/**
 * 元素的个数
 */
protected int elementCount;

/**
 * 当vector的大小大于其容量时,其容量扩充的大小,即容量增量。如果容量增量小于或等于零,则每次需要增长时vector的容量都会加倍。
 */
protected int capacityIncrement;

2.2 构造器与初始化容量

2.2.1 Vector()

构造一个空集合,使其内部数据数组的大小初始化为10,容量增量为零。其源码为:

public Vector() {
    this(10);
}

可以看到调用了另外一个构造方法。

2.2.2 Vector(int initialCapacity)

构造具有指定初始容量并且其容量增量等于零的空集合。

public Vector(int initialCapacity) {
    this(initialCapacity, 0);
}

可以看到调用了另外一个构造方法。

2.2.3 Vector(int initialCapacity, int capacityIncrement)

构造具有指定的初始容量和容量增量的空集合。

public Vector(int initialCapacity, int capacityIncrement) {
    //调用父类构造器
    super();
    //检查初始化容量,如果小于0就抛出异常
    if (initialCapacity < 0)
        throw new IllegalArgumentException("Illegal Capacity: "+
                initialCapacity);
    //初始化指定容量的数组
    this.elementData = new Object[initialCapacity];
    //初始化容量增量
    this.capacityIncrement = capacityIncrement;
}

2.2.4 Vector(Collection<? extends E> c)

构造一个包含指定 collection 中的元素的集合,这些元素按其 collection 的迭代器返回元素的顺序排列。

public Vector(Collection<? extends E> c) {
    //获取集合的元素数组,赋值给elementData
    elementData
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nathaniel333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值