中文网址和中文域名区别,长沙seo培训,英文网站建设方案 PPT,求免费的那种网站有哪些1. 概述上文「JDK源码分析-ArrayList」主要分析了 ArrayList 的实现原理。本文分析 List 接口的另一个实现类#xff1a;Vector。Vector 的内部实现与 ArrayList 类似#xff0c;也可以理解为一个「可变数组」。其继承结构如下#xff08;省略部分接口#xff09;#xff…1. 概述上文「JDK源码分析-ArrayList」主要分析了 ArrayList 的实现原理。本文分析 List 接口的另一个实现类Vector。Vector 的内部实现与 ArrayList 类似也可以理解为一个「可变数组」。其继承结构如下省略部分接口PS: 由于 Vector 目前使用较少且官方也推荐在无线程安全的需求时使用 ArrayList 代替 Vector这里仅研究其实现原理。stackoverflow 也有相关的讨论https://stackoverflow.com/questions/1386275/why-is-java-vector-and-stack-class-considered-obsolete-or-deprecated2. 代码分析仍然从其构造器入手进行分析。2.1 构造器Vector 对外提供四个构造器内部可以认为是两个其一protected 与 ArrayList 类似Vector 内部也维护了一个 Object 类型的数组elementData来存储元素默认初始容量也是 10。不同的是Vector 比 ArrayList 的构造器多了一个参数 capacityIncrement该变量也导致了二者的扩容方式略有不同后面进行分析。其二入参为集合的构造器public 2.2 扩容原理分析我们仍从其 add() 方法入手进行分析public 注意这里的关键字 synchronized。观察可以发现Vector 内部许多方法都使用了该关键字这也是 Vector 实现线程安全的方式简单粗暴其扩容方法实现如下/**
从这里可以看出Vector 与 ArrayList 的扩容方式基本一致只是新容量的计算方式有所不同这里分析下其新容量大小int Vector 计算扩容后的新容量时根据 capacityIncrement 的值可以分为两种情况capacityIncrement 0新容量 旧容量 capacityIncrementcapacityIncrement 0新容量 旧容量 * 2。3. 线程安全性Vector 是线程安全的它实现线程安全的方式也很简单粗暴直接在方法上使用 synchronized 关键字进行同步。4. 小结 与 ArrayList 类似Vector 也可以认为是「可变数组」 扩容原理与 ArrayList 基本一致只是新容量计算方式略有不同指定增长容量时新容量为旧容量 增长容量否则扩容为旧容量的 2 倍 线程安全的实现方式简单synchronized 当前使用较少这里仅学习其实现原理。