`
javandroid
  • 浏览: 25568 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

Vector源码分析

 
阅读更多

版本说明: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 源码解析和示例代码】 在Java编程语言中,`Vector`类是集合框架的一部分,早在JDK 1.0版本就已经存在。`Vector`类继承自`AbstractList`并实现了`List`, `RandomAccess`, `Cloneable`等接口,提供了...

    C++STL源码分析

    - **Vector源码分析**:理解 `vector` 的底层实现机制,包括如何动态调整容量、如何高效地插入和删除元素等。 - **Red-Black Tree源码分析**:分析红黑树的插入、删除操作以及颜色翻转等维护平衡的策略。 - **Memory...

    Vector底层结构和源码分析

    Vector 底层结构和源码分析 Vector 是 Java 中一个古老的集合类,用于存储和管理对象的集合。它和ArrayList一样,都是基于数组实现的,但是 Vector 是线程同步的,即线程安全的。在本文中,我们将深入分析 Vector ...

    泛型类vector<T>源码分析

    泛型类vector源码分析

    武侠2源码分析

    ### 武侠2源码分析 #### 一、全局对象与模块 在深入解析武侠2源码之前,我们首先需要了解整个项目的架构设计以及各主要模块的功能定位。这对于理解源码逻辑至关重要。 ##### 1.1 Game `Game` 类是整个游戏的核心...

    计算机后端-Java-Java核心基础-第24章 集合01 16. Vector的源码分析.avi

    计算机后端-Java-Java核心基础-第24章 集合01 16. Vector的源码分析.avi

    C++简单源码分析

    在这个“C++简单源码分析”中,我们将探讨C++的基本语法、常用算法以及程序设计技巧。 首先,C++的基础语法是学习的起点。C++的语法结构严谨,包括变量声明、类型系统、控制流(如if语句、for循环和while循环)、...

    combined-fisher-vector:为视频上的密集轨迹特征提取各种 Fisher 向量描述符

    在IT领域,Fisher向量(Fisher Vector)是一种广泛应用于图像识别和视频分析的特征表示方法,尤其在计算机视觉中具有重要的地位。标题提到的"combined-fisher-vector"项目显然是一个专门针对视频密集轨迹特征提取的...

    JUC并发编程与源码分析视频课.zip

    《JUC并发编程与源码分析视频课》是一门深入探讨Java并发编程的课程,主要聚焦于Java Util Concurrency(JUC)库的使用和源码解析。JUC是Java平台提供的一组高级并发工具包,它极大地简化了多线程编程,并提供了更...

    SGI STL vector相关源码

    通过对SGI STL`vector`源码的分析,我们可以学习到C++中动态数组的实现技巧,包括内存管理、迭代器实现、异常安全策略等,这对于理解和优化C++程序的性能至关重要。通过深入理解这些内部机制,开发者可以更好地运用...

    Vector初始化的各种写法

    在编程领域,特别是Java或C++等语言中,向量(Vector)是一种常见的...对于深入的源码分析或特定工具的使用,需要查看原文档或博客内容获取更精确的信息。遗憾的是,提供的链接已无法访问,因此无法提供更详细的解释。

    ARM Linux中断源码分析(2)——中断处理流程

    ### ARM Linux中断源码分析(2)——中断处理流程 #### 一、中断与异常概述 在ARM架构的Linux系统中,对中断处理的理解是非常重要的。本文将详细解析ARM Linux中断处理流程,从异常向量表出发,深入探讨中断处理的...

    思科vpp源码分析

    思科VPP(Vector Packet Processing)是一个高性能的网络数据平面解决方案,广泛应用于现代网络架构中,特别是在网络功能虚拟化...以上对思科VPP源码分析的知识点总结,提供了深入理解VPP核心概念和工作机制的基础。

    Opencv2.4.9源码分析——Support Vector Machines

    本文档共分为三个部分,第一个部分介绍SVM的原理,我们全面介绍了5中常用的SVM算法:C-SVC、ν-SVC、单类SVM、ε-SVR和ν-SVR,其中C-SVC和ν-SVC不仅介绍了处理两类分类问题的情况,还介绍处理多类问题的情况。...

    STL源码分析和EFFECTIVE

    “STL源码分析”这本书主要探讨了STL的内部实现机制,包括容器(如vector、list、set等)、迭代器、算法和适配器等核心组件。通过源码分析,读者可以了解到STL如何利用模板元编程技术实现高效的数据操作,并理解其...

    java.util.vector中vector小结

    4. **源码分析** - `Vector`的底层实现是一个可变大小的数组,它的很多操作直接对应于数组操作。线程安全是通过在方法上添加`synchronized`关键字来实现的。 - 当`Vector`需要扩容时,它会创建一个新的更大数组,...

    Java中的ArrayList的底层源码解读、LinkedList、Vector的区别介绍

    能学到什么:ArrayList的源码分析,自动扩容和自动缩容的源码分析,相关参数的深度解析,从是什么,为什么,怎么做三个角度进行讲解,用通俗易懂的白话进行介绍,LinkedList和Vector以及ArrayList的区别以及使用场景...

    JDK1.6中Arraylist,Vector,LinkedList源码

    源码分析时,可以关注以下几个关键点: 1. 容量管理:观察ArrayList和Vector如何进行扩容,了解它们扩容的策略和成本。 2. 插入和删除:比较ArrayList、Vector和LinkedList在插入和删除元素时的代码实现,分析时间...

    Learning Raphael JS Vector Graphics 书+源码

    6. **源码分析**:书中提供的源码可能是作者为了帮助读者深入理解Raphael.js的工作原理和最佳实践而编写的实例代码,可以作为学习和参考的宝贵资源。 7. **性能优化**:讨论如何提高Raphael.js图形的渲染速度,以及...

Global site tag (gtag.js) - Google Analytics