1.vector官方简绍
Vector类实现了一个可增长的对象数组。与数组一样,它包含可以使用整数索引访问的组件。但是,Vector的大小可以根据需要增加或缩小,以适应在创建Vector之后添加和删除项。
每个向量都试图通过维护一个容量和一个capacityIncrement来优化存储管理。容量总是至少与向量大小一样大;它通常更大,因为随着组件被添加到vector中,vector的存储空间会按capacityIncrement的大小成块增加。应用程序可以在插入大量组件之前增加向量的容量;这减少了增量再分配的数量。
这个类的迭代器和listIterator方法返回的迭代器是快速失败的:如果在迭代器创建后的任何时候,以除了迭代器自己的remove或add方法以外的任何方式对vector进行了结构修改,迭代器将抛出ConcurrentModificationException异常。因此,在面对并发修改时,迭代器会快速而干净地失败,而不是在未来不确定的时间发生任意的、不确定的行为。elements方法返回的Enumerations不会快速失败。
注意,迭代器的快速失败行为不能得到保证,因为一般来说,在存在不同步的并发修改时,不可能做出任何硬保证。快速失败迭代器尽可能地抛出ConcurrentModificationException。因此,编写一个依赖于此异常的程序是错误的:迭代器的快速失败行为应该只用于检测错误。
从Java 2平台v1.2开始,这个类进行了改进,以实现List接口,使其成为Java集合框架的成员。与新的集合实现不同,Vector是同步的。如果不需要线程安全的实现,建议使用ArrayList来代替Vector。
2.vector的底层原理
进入实例找到无参构造器
初始容量大小是10 我们进入this
我们再进入this
elementData, 这里就是new一个为10的数组
3.vector的add方法
写一个测试方法debug启动
进入ensureCapacityHelper方法
如果最小的容量大于数组大大小就扩容,
把元素放到0
下面我多几个元素,看一下grow方法是如何执行的,我们加几个,再去debug
11-10肯定大于0,现在他会执行他的扩容方法
老的容量就是等于10,新的容量等于老的容量的2倍就是20
这个两个判断都是不会执行的 第一个20-11也不小于0,第一个if不执行, 20-数组最大值肯定也是不大于0的,这个判断也是不执行的,下面就直接执行数组复制方法完成扩容。
4.vector的get方法
debug启动
下标比数组累计大小大,报数组下标越界
把对应坐标的元素返回
5.vector的remove方法
编写测试方法debug启动,
判断数组下标是否越界,获取到元素 ,复制素组
把最后一位设置为null
6.vector的set方法
书写测试方法 debug启动
这个方法很简单就是把对应坐标的数据修改了
7.vector自定义扩容
这个还是调grow方法进行扩容,这里就不细说了
8.vector总结
1.默认的初始化容量=10,每次扩容时2倍,可以设置每次扩容的容量。
2.基于数组实现
3.List接口下的子类
4.vector是线程安全的(有上同步锁)