`
为了明天
  • 浏览: 115143 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ArrayList、Vector、LinkedList的区别及其优缺点?

    博客分类:
  • JAVA
 
阅读更多
ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下:

一、同步性

ArrayList,LinkedList是不同步的,而Vestor是同步的。所以如果不要求线程安全的话,可以使用ArrayList或LinkedList,可以节省为同步而耗费的开销。但在多线程的情况下,有时候就不得不使用Vector了。当然,也可以通过一些办法包装ArrayList,LinkedList,使他们也达到同步,但效率可能会有所降低。

二、数据增长
从内部实现机制来讲ArrayList和Vector都是使用Objec的数组形式来存储的。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

三、检索、插入、删除对象的效率

ArrayList和Vector中,从指定的位置(用index)检索一个对象,或在集合的末尾插入、删除一个对象的时间是一样的,可表示为O(1)。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行(n-i)个对象的位移操作。
LinkedList中,在插入、删除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在索引一个元素的时候比较慢,为O(i),其中i是索引的位置。
————————————————————————————————————————
一般大家都知道ArrayList和LinkedList的大致区别:
     1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
     2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
     3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

ArrayList和LinkedList是两个集合 类,用于存储一系列的对象引用(references)。例如我们可以用ArrayList来存储一系列的String或者Integer。那么 ArrayList和LinkedList在性能上有什么差别呢?什么时候应该用ArrayList什么时候又该用LinkedList呢?


三.总结
ArrayList和LinkedList在性能上各 有优缺点,都有各自所适用的地方,总的说来可以描述如下:
1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对 ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是 统一的,分配一个内部Entry对象。


2.在ArrayList的 中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。


3.LinkedList不 支持高效的随机元素访问。


4.ArrayList的空 间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间


可以这样说:当操作是在一列 数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中 间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

所以,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是对其它指定位置的插入、删除操作,最好选择LinkedList
分享到:
评论

相关推荐

    JDK1.6中Arraylist,Vector,LinkedList源码

    在Java编程语言中,ArrayList、Vector和LinkedList是三种常见的动态数组实现,它们都属于集合框架中的List接口。这里我们将深入探讨这三种数据结构的源码,理解它们的内部实现、性能特性和适用场景。 首先,...

    ArrayList LinkList和vector的区别

    ArrayList、LinkList和Vector的区别 ArrayList、LinkList和Vector是Java中三个常用的集合类,它们都...ArrayList、LinkList和Vector都是Java中常用的集合类,它们都有其优缺点,在选择时需要根据具体情况进行选择。

    02-Java集合容器面试题-重点.docx

    Java集合容器概述、集合框架、List、Set、Map接口、Iterator、ArrayList、LinkedList、Vector、HashSet、HashMap、Queue、BlockingQueue、ConcurrentHashMap等。 Java 集合容器概述 Java 集合容器是用于存储数据...

    51. ArrayList LinkedList Set HashMap介绍.txt

    ### ArrayList #### 简介 `ArrayList` 是 Java 中的一种动态数组实现方式,它允许在运行时调整其大小。`ArrayList` 实现了 `List`...理解这些基本数据结构的工作原理及其优缺点,可以帮助开发者更有效地解决实际问题。

    java集合-练习题.pdf

    本篇资源摘要信息主要讲解 Java 集合框架的相关知识点,包括 Collection 接口、List 接口、Set 接口、Map 接口的特点和区别,以及 ArrayList、LinkedList、Vector 等实现类的使用和区别。 一、Collection 接口的...

    Java集合面试题汇总.pdf

    List接口下的ArrayList和LinkedList各有优缺点,前者在随机访问和内存使用上更优,后者在插入和删除操作上更快。Set接口中的HashSet、LinkedHashSet和TreeSet分别提供了不同的元素排序和唯一性保证。 面试题中还会...

    java常用集合框架[归类].pdf

    面试中常见的问题,例如比较ArrayList、Vector和LinkedList的存储性能和特性,主要是考察它们在不同操作场景下的优缺点。ArrayList和Vector都是基于数组实现,适合频繁进行索引访问,但插入和删除元素需要移动大量...

    2023版Java面试题.pdf

    1. ArrayList 和 LinkedList 的区别:ArrayList 是基于数组实现的,而 LinkedList 是基于链表实现的。 2. Vector 和 ArrayList 的区别:Vector 是线程安全的,而 ArrayList 是线程不安全的。 3. Array 和 ArrayList ...

    常见集合知识和面试题

    3. **Array和ArrayList在存储和查找方面的优缺点?** - `ArrayList`查找速度快,但增删操作较慢。 - `LinkedList`增删操作快,但查找速度较慢。 4. **hashCode()和equals()的重要性?** - 对于需要确保元素唯一...

    java collection总结-流氓版

    总之,Java集合框架中的ArrayList、Vector、LinkedList、HashMap和Hashtable各有其优缺点,根据具体需求和性能要求,选择合适的数据结构是优化程序性能的关键。通过深入理解这些类和接口,开发者可以编写出更加高效...

    Java程序设计 3 数组与集合 简图.ppt

    总的来说,数组和集合各有优缺点,选择哪种取决于具体的需求。在实际开发中,根据数据的特性和操作需求,灵活选用数组或集合框架的不同实现,能够极大地提高代码的效率和可维护性。同时,深入理解集合框架的内部机制...

    Java_resizableArray-master.zip_zip

    11. **集合框架中的其他实现**:除了ArrayList,Java集合框架还提供了Vector(线程安全的ArrayList)和LinkedList(基于链表的数据结构),它们都是List接口的实现,各有优缺点,应根据实际需求选择合适的类型。...

    java基础--笔记

    在第二次课中,老师讲解了快捷键的设置、数组ArrayList、LinkedList和Vector的优缺点。ArrayList是基于数组实现的,方便随机访问,但插入和删除效率相对低;LinkedList适合频繁插入和删除,但访问速度慢;Vector与...

    java面试宝典

    67、说出ArrayList,Vector, LinkedList的存储性能和特性 17 68、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 17 69、文件读写的基本类 17 70、多线程有几种实现...

    JAVA基础面试题

    ArrayList、Vector、LinkedList的存储性能和特性 ArrayList采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦。 Vector和ArrayList都是用数组方式存储数据,...

    11.集合框架001-Collection接口10-12

    在深入学习这些概念时,开发者应理解它们在实际应用中的优缺点,并根据需求选择合适的数据结构。例如,如果需要快速访问任意位置的元素,ArrayList可能是更好的选择;如果关注并发安全,可以考虑使用Vector;而在...

    大数据面试题.pdf

    8. **ArrayList、Vector、LinkedList的区别及其优缺点**: - ArrayList和Vector都是基于数组实现,支持随机访问,但插入和删除较慢(需要移动元素)。 - LinkedList使用双向链表,插入和删除速度快,但访问速度慢...

    字节跳动面经1

    Vector是同步的,但在多线程环境下性能较差,而List接口的实现如ArrayList和LinkedList各有优缺点。 - C++容器:可能涉及到STL中的容器,如vector、list等,讨论了它们的底层实现和使用场景。 - TCP网络协议:考察...

    杭州公司笔试题目.doc

    八、ArrayList 和 LinkedList 的区别 ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦。LinkedList 采用的将对象存放在独立的空间中,而且在每个...

Global site tag (gtag.js) - Google Analytics