版本说明:jdk1.7.0_79
一、Vector概述
Vector集合已经成为了一个过时的集合,但是还是有必要研究一下,这样才能明白为什么它会被抛弃。
Vector类与ArrayList一样,都是List接口的不同实现,当然它们会有不同的特征,这也是Java多态的表现。
Vector内部是用数组实现的,这个和ArrayList一样。
二、构造器
public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
protected Object[] elementData;//用来存储元素
protected int elementCount;//元素数量
protected int capacityIncrement;//增量。当容器装满时,会自动扩容,扩容大小即为该增量。
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
public Vector() {
this(10);
}
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);
}
……
……
}
创建Vector时,可以指定初始容量initalCapacity和增量(用于自动扩容)。如果没有指定初始容量值,则默认初始容量为10。
因为Vector的实现与ArrayList基本上一样的,所以不再赘述,具体细节请参考ArrayList源码分析
三、Vector和ArrayList的比较
1.扩容
Vector在创建时能够指定增量,如果指定了该增量,当自动扩容时增加的容量就是该增量值。如果创建时没指定增量(或该值<=0),则扩容一倍(容量为原来的两倍)
ArrayList并没有提供能指定增量的构造方法,大约扩容到原来的1.5倍(具体参考ArrayList源码分析)
2.线程安全和效率
Vector的很多方法都是线程安全的,然而java.util.concurrent包中对容器提供了线程安全的实现版本,也就是说Vector被淘汰了。非线程安全时,可以用ArrayList来代替Vetor,需要线程安全时可以使用Collections.synchronizedList(new ArrayList())和CopyOnWriteArrayList。所以Vector注定难逃被淘汰的命运。
ArrayList并不是线程安全的,因此相对来说,ArrayList比Vector效率要高一些。
分享到:
相关推荐
【JAVA Vector 源码解析和示例代码】 在Java编程语言中,`Vector`类是集合框架的一部分,早在JDK 1.0版本就已经存在。`Vector`类继承自`AbstractList`并实现了`List`, `RandomAccess`, `Cloneable`等接口,提供了...
- **Vector源码分析**:理解 `vector` 的底层实现机制,包括如何动态调整容量、如何高效地插入和删除元素等。 - **Red-Black Tree源码分析**:分析红黑树的插入、删除操作以及颜色翻转等维护平衡的策略。 - **Memory...
Vector 底层结构和源码分析 Vector 是 Java 中一个古老的集合类,用于存储和管理对象的集合。它和ArrayList一样,都是基于数组实现的,但是 Vector 是线程同步的,即线程安全的。在本文中,我们将深入分析 Vector ...
泛型类vector源码分析
### 武侠2源码分析 #### 一、全局对象与模块 在深入解析武侠2源码之前,我们首先需要了解整个项目的架构设计以及各主要模块的功能定位。这对于理解源码逻辑至关重要。 ##### 1.1 Game `Game` 类是整个游戏的核心...
计算机后端-Java-Java核心基础-第24章 集合01 16. Vector的源码分析.avi
在这个“C++简单源码分析”中,我们将探讨C++的基本语法、常用算法以及程序设计技巧。 首先,C++的基础语法是学习的起点。C++的语法结构严谨,包括变量声明、类型系统、控制流(如if语句、for循环和while循环)、...
在IT领域,Fisher向量(Fisher Vector)是一种广泛应用于图像识别和视频分析的特征表示方法,尤其在计算机视觉中具有重要的地位。标题提到的"combined-fisher-vector"项目显然是一个专门针对视频密集轨迹特征提取的...
《JUC并发编程与源码分析视频课》是一门深入探讨Java并发编程的课程,主要聚焦于Java Util Concurrency(JUC)库的使用和源码解析。JUC是Java平台提供的一组高级并发工具包,它极大地简化了多线程编程,并提供了更...
通过对SGI STL`vector`源码的分析,我们可以学习到C++中动态数组的实现技巧,包括内存管理、迭代器实现、异常安全策略等,这对于理解和优化C++程序的性能至关重要。通过深入理解这些内部机制,开发者可以更好地运用...
在编程领域,特别是Java或C++等语言中,向量(Vector)是一种常见的...对于深入的源码分析或特定工具的使用,需要查看原文档或博客内容获取更精确的信息。遗憾的是,提供的链接已无法访问,因此无法提供更详细的解释。
### ARM Linux中断源码分析(2)——中断处理流程 #### 一、中断与异常概述 在ARM架构的Linux系统中,对中断处理的理解是非常重要的。本文将详细解析ARM Linux中断处理流程,从异常向量表出发,深入探讨中断处理的...
思科VPP(Vector Packet Processing)是一个高性能的网络数据平面解决方案,广泛应用于现代网络架构中,特别是在网络功能虚拟化...以上对思科VPP源码分析的知识点总结,提供了深入理解VPP核心概念和工作机制的基础。
本文档共分为三个部分,第一个部分介绍SVM的原理,我们全面介绍了5中常用的SVM算法:C-SVC、ν-SVC、单类SVM、ε-SVR和ν-SVR,其中C-SVC和ν-SVC不仅介绍了处理两类分类问题的情况,还介绍处理多类问题的情况。...
“STL源码分析”这本书主要探讨了STL的内部实现机制,包括容器(如vector、list、set等)、迭代器、算法和适配器等核心组件。通过源码分析,读者可以了解到STL如何利用模板元编程技术实现高效的数据操作,并理解其...
4. **源码分析** - `Vector`的底层实现是一个可变大小的数组,它的很多操作直接对应于数组操作。线程安全是通过在方法上添加`synchronized`关键字来实现的。 - 当`Vector`需要扩容时,它会创建一个新的更大数组,...
能学到什么:ArrayList的源码分析,自动扩容和自动缩容的源码分析,相关参数的深度解析,从是什么,为什么,怎么做三个角度进行讲解,用通俗易懂的白话进行介绍,LinkedList和Vector以及ArrayList的区别以及使用场景...
源码分析时,可以关注以下几个关键点: 1. 容量管理:观察ArrayList和Vector如何进行扩容,了解它们扩容的策略和成本。 2. 插入和删除:比较ArrayList、Vector和LinkedList在插入和删除元素时的代码实现,分析时间...
6. **源码分析**:书中提供的源码可能是作者为了帮助读者深入理解Raphael.js的工作原理和最佳实践而编写的实例代码,可以作为学习和参考的宝贵资源。 7. **性能优化**:讨论如何提高Raphael.js图形的渲染速度,以及...