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