`

Vector与ArrayList对比

 
阅读更多

虽然在使用的时候好象这两个类没什么区别, 它们都是从List继承下来的, 拥有相同的方法, 但它们的内部还是有些不同的,

a) 首先Vector在内部的一些方法作了线程同步(synchronized) 同步的代价就是降低了执行效率, 但提高了安全性。而ArrayList则是线程不同步的, 可以多线程并发读写它。如果不考虑到线程的安全因素,一般用arraylist效率比较高

 

b)内部数据增长率。 所有的这些矢量集合在内部都是用Object的数组进行存储和操作的。 所以也就明白了为什么它可以接受任何类型的Object 但取出来的时候需要进行类型再造。 VectorArrayList具有自动伸缩的功能, 我们不用管它size多大, 我们都可以在它的后面追加元素。 VectorArrayList内部的数组增长率是不一样的, 当内部的数组不能容纳更多元素的时候,Vector增长原来的一倍,ArrayList增加原来的0.5倍

如过在集合中使用数据量比较大的数据,用vector有一定的优势

 

List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下:

  1. ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
  2. Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
  3. LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
分享到:
评论

相关推荐

    第8讲 对比Vector、ArrayList、LinkedList有何区别1

    在Java集合框架中,Vector、ArrayList和LinkedList都是List接口的实现,它们提供了有序集合的功能,允许根据位置进行元素的添加、删除和查找。然而,它们在设计和性能上有着显著的区别。 首先,Vector是Java早期...

    Java中ArrayList的使用方法以及与vector的对比

    Java 中 ArrayList 的使用方法以及与 Vector 的对比 ArrayList 是 Java 中的一种动态数组,它提供了很多有用的特性,例如动态地增加和减少元素,实现了 ICollection 和 IList 接口,灵活的设置数组的大小等。下面...

    ArrayList LinkedList Vector性能对比

    Vector的扩容策略与ArrayList相同,只是其默认初始容量和增长因子不同于ArrayList。 在选择这三个类时,应考虑以下几个因素: 1. **性能**:如果需要频繁的随机访问,ArrayList通常是更好的选择;如果插入和删除...

    对比Vector、ArrayList、LinkedList1

    在Java集合框架中,Vector、ArrayList和LinkedList是三种常见的List接口实现类,它们各自具有不同的特点和适用场景。下面我们将详细对比这三个类的区别。 1. **Vector** - **线程安全**:Vector是线程安全的,因为...

    比较ArrayList、LinkedList、Vector1

    - **实现原理**:Vector与ArrayList类似,也是基于动态数组,但它是线程安全的。 - **线程安全**:每个公共方法都在内部进行了同步,这意味着在多线程环境下无需额外的同步代码。 - **效率**:由于线程安全的实现...

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

    适用人群:JavaSE初学者,对源码感兴趣的,想要深度了解ArrayList底层实现、数据结构、add方法、Remove方法、以及自动扩容机制的同学,并且对ArrayList已经有过使用,想要学习它与LinkedList,Vector等的区别,该...

    Collection 详细案例,集合的详细例子,list例子和详细解析,map详细例子和详细解析,set详细列子和详细解析,

    案例会对比ArrayList和Vector的使用,以及如何在需要线程安全时选择Vector。 Map接口是键值对的集合,最常用的实现包括HashMap、TreeMap等。案例中会详细介绍Map的使用,如创建Map,插入键值对,获取键或值,以及...

    ArrayList.docx

    #### 七、`ArrayList`与`LinkedList`对比 1. **底层实现差异**: - `ArrayList`基于动态数组实现,支持快速随机访问。 - `LinkedList`基于双向链表实现,支持高效插入和删除操作。 2. **操作性能对比**: - ...

    Java中的vector类使用方法示例详解

    8. Vector和ArrayList的对比: Vector是线程安全的,它的所有方法都是同步的,因此在多线程环境下使用时,Vector可以保证数据的一致性,但这也使得Vector在单线程环境下性能低于ArrayList。ArrayList每次扩容为原...

    分析Java中ArrayList与LinkedList列表结构的

    **ArrayList与LinkedList的对比** 1. **性能差异**: - 插入和删除:ArrayList在中间或开头插入和删除元素时,需要移动后续所有元素,效率较低;而LinkedList只需要修改相邻节点的引用,效率较高。 - 访问速度:...

    hashmap 实例

    在本文中,我们将深入理解 HashMap 的实例及其工作原理,并与其他数据结构如 Vector、ArrayList、LinkedList 和 Hashtable 进行对比。 首先,我们来看 HashMap 的实例代码: ```java HashMap hashmap = new ...

    集合底层结构.docx

    【ArrayList, LinkedList 和 Vector 的对比】 ArrayList 和 LinkedList 都实现了 List 接口,它们之间的主要区别在于底层实现和操作效率: 1. ArrayList 底层是一个可变大小的数组,插入和删除操作在数组末尾相对...

    java学习文档

    Vector与ArrayList的对比 #### Vector类介绍: `Vector` 类是线程安全的(thread-safe),这意味着它在多线程环境下能保证数据的一致性。Vector 的方法如 `add`, `remove`, `insertElementAt` 等都是同步的,因此...

    Java集合类详解总结

    #### ArrayList与LinkedList对比 - `ArrayList`在随机访问时效率高于`LinkedList`,因为`LinkedList`需要从头遍历到指定位置。 - `LinkedList`在插入和删除操作上优于`ArrayList`,因为它不需要移动其他元素。 ####...

    Java 集合类面试题.docx

    2. **ArrayList 与 Vector 的对比** - **ArrayList** 是非线程安全的,适用于单线程环境,它的容量增长策略通常是原来容量的50%。 - **Vector** 是线程安全的,每个操作都进行了同步处理,因此在多线程环境下更...

    android代码实例

    - RecyclerView与Adapter:在Android的ListView和RecyclerView中,常用ArrayList作为适配器的数据源,通过Adapter将ArrayList中的数据绑定到列表视图。 - 异步操作:例如在AsyncTask中,可以使用ArrayList来临时...

    集合框架面试题.pdf

    1. ArrayList与Vector的区别主要体现在同步性和数据增长策略上。 - 同步性:Vector是线程安全的,其方法都是同步的,而ArrayList则不是。因此,Vector在多线程环境下使用时能够保证线程安全,但相应地性能会受到...

    Java 最常见的 208 道面试题:第二模块答案

    **ArrayList 和 Vector 的对比**: - **线程安全**:Vector 是线程安全的,ArrayList 不是。 - **性能**:ArrayList 比 Vector 快,因为 Vector 的所有操作都是同步的,这会影响性能。 - **功能**:ArrayList 更通用...

    高级java面试文档

    **2.1 Vector与ArrayList的比较** - **Vector**: - 方法同步,线程安全。 - 性能较差。 - 默认扩容为原容量的两倍。 - **ArrayList**: - 方法非同步,线程不安全。 - 性能较好。 - 默认扩容为原容量的1.5倍...

Global site tag (gtag.js) - Google Analytics