Java中的Vector源码解析

Java中的Vector源码解析

一、Vector介绍

Vector 是一个矢量队列,它的继承关系和ArrayList是一样的,同样实现了RandomAccess标记接口,用来表明其支持快速(通常是固定时间)随机访问。此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能Vector实现了Cloneable标记接口,用来指示Object.clone()方法可以合法地对该类实例按字段复制。如果在没有实现 Cloneable接口的实例上调用 Objectclone 方法,则会导致抛出 CloneNotSupportedException 异常。Serializable 接口: 类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化

二、Vector类继承关系

180fa2d7fa4ee2fba5b5a5a34f3064e7.png

三、Vector特性

  • 1、底层由一个可以增长的数组组成

  • 2、Vector 通过 capacity (容量) 和 capacityIncrement (增长数量) 来尽量少的占用空间

  • 3、扩容时默认扩大两倍

  • 4、最好在插入大量元素前增加 vector 容量,那样可以减少重新申请内存的次数

  • 5、通过 iteratorlastIterator 获得的迭代器是 fail-fast

  • 6、通过 elements 获得的老版迭代器 Enumeration 不是 fail-fast 的

  • 7、同步类,每个方法前都有同步锁 synchronized

四、Vector vs ArrayList

共同点

  • 1、都是基于数组

  • 2、都支持随机访问

  • 3、默认容量都是 10

  • 4、都有扩容机制

区别

  • 1、Vector 出生的比较早,JDK 1.0 就出生了,ArrayList JDK 1.2 才出来

  • 2、VectorArrayList 多一种迭代器 Enumeration

  • 3、Vector 是线程安全的,ArrayList 不是线程安全的

  • 4、Vector 默认扩容2倍ArrayList1.5倍

  • 5、Vector相比ArrayList很多方法都使用了synchronized来保证线程安全,这也就意味着每次都需要获得对象同步锁,效率会明显比ArrayList要低


   转载规则


《Java中的Vector源码解析》 mikyou 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Java中的HashMap和ConcurrentHashMap源码解析 Java中的HashMap和ConcurrentHashMap源码解析
Java中的HashMap和ConcurrentHashMap源码解析一、HashMap与HashTable区别 1、线程是否安全: HashMap 是非线程安全的,HashTable 是线程安全的;HashTable 内部的方法基本都经过
2020-01-02
下一篇 
Android中Gradle原理以及机制深入分析 Android中Gradle原理以及机制深入分析
Android中Gradle原理以及机制深入分析一、Gradke构建流程 Gradle的构建主要分为三个阶段: 1、初始化阶段(Initlization) 读取setting.gradle,分析出项目包含的project(include的
2020-01-01