• 集合框架----源码解读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是线程安全的(有上同步锁)

  • 相关阅读:
    MySQL中的随机抽取
    验证 Vue Props 类型,你这几种方式你可能还没试用过
    【Java那些年系列-启航篇 04】Java程序架构:深入理解类与对象的设计原则
    3d测试环境搭建
    智慧茶园:茶厂茶园监管可视化视频管理系统解决方案
    产业项目招商活动会议课程报名签到h5小程序pc开源版开发
    倒数三天 | WAIC 滴水湖 AI 开发者创新论坛:当数据库遇上 AI 来啦!
    WPF Prism框架学习
    游戏史上五个定价最高的量产型游戏机
    day60:ARMday7,串口实现数据收发字符串
  • 原文地址:https://blog.csdn.net/qq_42847719/article/details/128065016