集合框架----源码解读Vector篇

1.vector官方简绍

Vector类实现了一个可生长的对象数组。与数组一样,它包含可以使用整数索引访问的组件。然而,在创建完Vector之后,Vector的大小可以根据需要进行增长或收缩,以适应添加和移除项目。
每个向量都试图通过保持一个容量和一个容量增量来优化存储管理。容量总是至少和向量大小一样大;它通常更大,因为随着组件被添加到向量中,向量的存储以容量增量的大小分块增加。一个应用程序可以在插入大量组件之前增加一个向量的容量;这减少了增量再分配的数量。
该类的迭代程序和list迭代程序方法返回的迭代程序是失败快速的:如果在创建迭代程序后的任何时间对向量进行结构修改,除了通过迭代程序自己的删除或添加方法外,迭代程序将抛出ConcurrentModificationException异常。因此,在面对并发修改时,迭代程序能够快速、干净地失效,而不是冒着在未来未确定时间发生任意、非确定性行为的风险。元素法返回的枚举不是失效快的。
需要注意的是,迭代程序的快速失效行为是无法保证的,因为一般来说,在存在非同步并发修改的情况下,不可能做出任何硬性保证。Fail-fast迭代程序在尽力而为的基础上抛出Concurrent ModificationException。因此,编写依赖于该异常的程序来判断其正确性是错误的:迭代程序的快速失效行为应该仅用于检测bug。
注意,迭代器的失效快行为是无法保证的,因为一般来说,在存在不同步的并发修改的情况下,它不可能做出任何困难的保证。快速迭代器在尽力而为的基础上抛出Concurrent ModificationException。因此,编写一个依赖于该异常的程序来保证其正确性是错误的:迭代器的失效快行为应该只用于检测bug。
截至Java 2平台v1.2,这个类被改造来实现List接口,使其成为Java Collections Framework的成员。与新的集合实现不同,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是线程安全的(有上同步锁)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Royalreairman

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

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

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

打赏作者

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

抵扣说明:

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

余额充值