Vector源码分析

vector源码分析 这里引用源码中的一段描述 In some terminology a %vector can be described as a dynamic C-style array, it offers fast and efficient access to individual elements in any order and saves the user from worrying aboutmemory and size allocation. vector毫不夸张得说就是有动态内存分配功能的传统数组 阅读详情

成员变量

 protected Object[] elementData;
Vector内部实现的数组

protected int elementCount;
包含的元素个数

protected int capacityIncrement;
Vector每次扩容时增加的元素个数,如果不大于0,则每次扩容时以成倍的速度增长

构造方法

 public Vector(int initialCapacity, int capacityIncrement) {
	super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
	this.elementData = new Object[initialCapacity];
	this.capacityIncrement = capacityIncrement;
    }

    /**
     * Constructs an empty vector with the specified initial capacity and
     * with its capacity increment equal to zero.
     *
     * @param   initialCapacity   the initial capacity of the vector
     * @throws IllegalArgumentException if the specified initial capacity
     *         is negative
     */
    public Vector(int initialCapacity) {
	this(initialCapacity, 0);
    }

    /**
     * Constructs an empty vector so that its internal data array
     * has size {@code 10} and its standard capacity increment is
     * zero.
     */
    public Vector() {
	this(10);
    }

    /**
     * Constructs a vector containing the elements of the specified
     * collection, in the order they are returned by the collection's
     * iterator.
     *
     * @param c the collection whose elements are to be placed into this
     *       vector
     * @throws NullPointerException if the specified collection is null
     * @since   1.2
     */
    public Vector(Collection<? extends E> c) {
	elementData = c.toArray();
	elementCount = elementData.length;
	// c.toArray might (incorrectly) not return Object[] (see 6260652)
	if (elementData.getClass() != Object[].class)
	    elementData = Arrays.copyOf(elementData, elementCount, Object[].class);
    }
构造方法同ArrayList的基本类似,不同的地方在于Vector可以指定数组每次扩容时的大小capacityIncrement,如果该值没有指定的话默认为0,那么数组在每次扩容的时候至少是当前数组大小的2倍。

方法

其基本方法以及方法的基本思想同 ArrayList相似,不同的地方在于Vector中相关的方法会加上synchronized关键字。

总结

Vector整体代码的实现思想与ArrayList相同,二者的区别在于Vector是线程安全的,那么其性能相较于ArrayList来说有所下降。
Vector实现原理源码分析 Vector在jdk1.0版本就存在的一个并发列表类,Vector和ArrayList实现了非常相似的接口,集成了相同的类。和ArrayList不同的是,Vector是线程安全的,大部分的对外暴露的公共方法上,都添加了synchronized同步锁,很显然,同步锁的加入,使得Vector的性能并不高,要使用线程安全的List,则推荐CopyOnWriteArrayList。 一、Vector的类结构 从类的结构图看,Vector的类结构体系基本和ArrayList一致。 二、源码分析 /** * 存储元 阅读详情

相关推荐

DTW Barycenter Averaging(DBA)——平均序列求法

DBA该算法是用来求序列数据集SS的一致序列(平均序列)。由Franc-ois Petitjean提出的。目前,该方法求得的平均序列是最准确的。 假设一元组为S={s1,s2,⋯,sn}S={s1,s2,\cdots,sn},当SS中的元素为实数时,很容易求的SS的平均值: avg=s1+s2+⋯+snn(1) avg = \dfrac{s1 +s2+\cdots+sn}{n} \qquad\q

光怪陆离 1万+

STL源码分析之vector容器

vector与array非常相似,两者唯一差别在于空间运用的灵活性          array是静态空间,一旦配置了就不能改变;若要改变使用的空间大小,一切琐碎由客户端自己来处理:先配置新空间,然后将元素从旧址一一搬到新址去,在退还原来的空间          vector则是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新的元素   以下为sgi vector源码:

博客 701

源码分析——Vector

首先我们再来回顾一下List集合框架的具体体现: 从中可以看出,Vector容器是和ArrayList最相似的集合类容器,其父类都是AbstractList类,那Vector到底有什么用?为什么有了ArrayList还要创一个Vector容器呢?那就从源码开始慢慢解读吧。 首先看一看Vector类的结构: public class Vector<E> extends Ab...

qq_41843697的博客 307

Win11内核隔离无法打开的解决方案详解

内核隔离问题的解决需遵循"先硬件后软件"的排查原则,90%以上的案例可通过驱动清理或外设断开解决。对于必须禁用该功能的用户,建议定期使用Windows Defender进行全盘扫描,并保持系统更新至最新版本。技术决策需在安全性和兼容性之间取得平衡,本文提供的多维解决方案可帮助用户构建更稳定的Windows 11使用环境。

mmoo_python的博客 4830

智能车小白也能懂:手把手教你用LM358和工字电感搭建电磁循迹模块(附PCB设计避坑)

本文详细介绍了如何利用LM358运放和工字电感搭建智能车电磁循迹模块,从电感选型、电路设计到PCB布局和焊接调试,提供全流程实战指南。特别针对新手常见问题,如信号干扰、电路饱和等,给出具体解决方案和参数配置,帮助智能车比赛爱好者快速掌握电磁循迹技术。

weixin_30307921的博客 403

Vector,ArrayList,Linkedlist源码分析

list接口和set集合

Cocobuhui的博客 974

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

在 (UE4 4.27) UHierarchicalInstancedStaticMesh(HISM)原理分析 这篇博客大致介绍HISM组件从游戏线程到渲染线程的重建KD-Tree和剔除并提交DrawCall逻辑,但是没有分析渲染层的大致数据结构和实现. 可以看出FHierarchicalStaticMeshSceneProxy 实际存储Instance数组数据来自于FInstancedStaticMeshSceneProxy FHierarchicalStaticMeshSceneProxy只是以FClu

qq_29523119的博客 2726

【JDK源码】Vector源码分析

迭代器Iterator: AbstractList.Itr ---Itr AbstractList.ListItr ----ListItr

小确幸的博客 218

【GD32篇】驱动AD7616完成数据采集

GD32F10X驱动AD7616完成数据采集

we_long的博客 1万+

【目标检测】全局上下文感知的详解

目标检测中的全局上下文感知(Global Context Awareness)​是指模型在定位和识别目标时,能够有效利用图像中全局或大范围的上下文信息(如场景语义、目标间关系、空间布局等),而不仅仅依赖局部特征。这种能力显著提升了检测的鲁棒性,尤其是在复杂场景(如遮挡、小目标、密集目标)中表现突出。

浩瀚之水的专栏 650

Java集合源码分析(四)——Vector

简介 Vector 是矢量队列,它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口。 和ArrayList不同,Vector中的操作是线程安全的。 源码分析 public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializ

Think Different. 215

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java基础-源码分析-ArrayList/Vector

Java工程师知识树 / Java基础 首先看下ArrayList的源码分析,Vector与ArrayList区别在与方法层面加上了synchronized。 ArrayList特点 ArrayList是List接口的可变数组非同步实现,并允许包括null在内的所有元素。底层使用数组实现。 ArrayList结构 Java继承与实现的接口情况为: public class ArrayList<E> extends AbstractList<E> implemen

hughjin 356

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Vector 详细介绍(源码分析)

主要以下层面去分析Vector Vector介绍 Vector架构设计(数据结构) Vector源码分析 Vector遍历方式,性能,示例 Vector介绍 Vector简介 Vector 是矢量队列,它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口。 Vector 继承了AbstractLis...

crossroads10的博客 452

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java集合-ArrayList/Vector/ LinkedList源码分析

以上策略不适用,编者重写了else语句,会直接选择在DEFAUIT_CAPCITY和minCapacity中最大的那个(因为需要满足存储的需求),可以看到这里的DEFAUIT_CAPCITY被初始化为一个长度为 10 的数组。用crtl+b步入add函数,if语句用来判断位置是否已满,若相等则说明已满,需要用grow()扩展,接着就是赋值和将size++,若长度足够,则不需要调用grow()没有被显式设置,扩容时的增长量将与当前容量相同,会使用推荐的增长策略(通常是。引用,指向新的数组,完成扩容操作。

2301_81088399的博客 894

vector 初始化_java集合(二):ArrayList、Vector、LinkedList的底层源码分析和对比

(一)List接口的概述在前面我们讲完了Collection的特点和使用,接下来就开始讲Collection的子接口和实现类,List具有以下两个特点:1.有序(不是指按数值大小有序排列,而是指插入和取出的顺序是固定的),因为List通过下标记录值。2.可重复,List可以添加重复的值,也可以添加重复的空值。List继承了Collection,所以Collection中的方法它都能使用,...

weixin_39800957的博客 109

List源码分析(包含ArrayList、LinkedList、Vector)

一篇文章带你熟悉ArrayList、LinkedList、Vector底层源码,分析其底层源码的执行逻辑

SuperGeekNumber的博客 131

Java集合:ArrayList的使用及源码分析、Vector和LinkedList的使用

ArrayList的使用及源码分析

qq_59212867的博客 303

ArrayList,LinkedList,Vector源码分析

【代码】ArrayList,LinkedList,Vector源码分析。

qq_55278081的博客 126

深入Java源码分析Vector、ArrayList、LinkedList的特点和区别

深入Java源码分析Vector、ArrayList、LinkedList的特点和区别? * 三者区别: ArrayList和Vector底层的数据结构基于【动态数组】实现的; LinkedList底层的数据结构是基于 【双链表】实现的. ArrayList和Vector实现了RandomAccess接口【支持随机访问】; LinkedList没有实现RandomAccess接口【不支持随机访问...

精◈彩◈猿◈笔◈记 575
上一篇: ArrayList源码分析
下一篇: 乔布斯《遗失的访谈》整理
kevin0xFFFFFFFF
博客等级 码龄17年 3粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值