`
univasity
  • 浏览: 801494 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[Java基础]ArrayList和Vector的区别[收集]

阅读更多

 

关于ArrayList和Vector区别如下:
1. ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍。
2. Vector提供indexOf(obj, start)接口,ArrayList没有。
3. Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。

ArrayList
   ArrayList 实现了可变大小的数组。它允许所有元素,包括 null ArrayList 没有同步。
size
isEmpty get set 方法运行时间为常数。但是 add 方法开销为分摊的常数,添加 n 个元素需要 O(n) 的时间。其他的方法运行时间为线性。
  每个 ArrayList 实例都有一个容量( Capacity ),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法   并没有定义。当需要插入大量元素时,在插入前可以调用 ensureCapacity 方法来增加 ArrayList 的容量以提高插入效率。
  和 LinkedList 一样, ArrayList 也是非同步的( unsynchronized )。

Vector

   Vector 非常类似 ArrayList ,但是 Vector 是同步的。由 Vector 创建的 Iterator ,虽然和 ArrayList 创建的 Iterator 是同一接口,但是,因为 Vector 是同步的,当一个 Iterator 被创建而且正在被使用,另一个线程改变了 Vector 的状态(例如,添加或删除了一些元素),这时调用 Iterator 的方法时将抛出 ConcurrentModificationException ,因此必须捕获该异常。

同步性
Vector
是同步的。这个类中的一些方法保证了 Vector 中的对象是线程安全的。而 ArrayList 则是异步的,因此 ArrayList 中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用 ArrayList 是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。

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

使用模式
ArrayList Vector 中,   从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用 O(1) 表示。但是,如果在集合的其他位   置增加或移除元素那么花费的时间会呈线形增长: O(n-i) ,其中 n 代表集合中元素的个数, i 代表元素增加或移除元素的索引位置。为什么会这样呢?以为在   进行上述操作的时候集合中第 i 和第 i 个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?
这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用 Vector ArrayList 都可以。如果是其他操作,你最好选择其他的集合操作类。比如, LinkList 集合类在增加或移除集合中任何位置的元素所花费的时间都   是一样的 ?O(1) ,但它在索引一个元素的使用缺比较慢- O(i), 其中 i 是索引的位置 . 使用 ArrayList 也很容易,因为你可以简单的使用索引来代   替创建 iterator 对象的操作。 LinkList 也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。
最后,在《 Practical Java 》一书中 Peter Haggar 建议使用一个简单的数组( Array )来代替 Vector ArrayList 。尤其是对于执行效率要求高的程序更应如此。因为使用数组 (Array) 避免了同步、额外的方法调用和不必要的重新分配空间的操作。
分享到:
评论

相关推荐

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    java面试题

    4. 说出ArrayList,Vector,LinkedList的存储性能和特性 8 5. EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 9 6. Collection 和 Collections的区别。 9 7. &...

    关于JAVA面试的100题及其答案

    ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...

    飞秋java源码-interviewNote:面试笔记

    源码分析:ArrayList、Vector、LinkedList、HashMap、ConcurrentHashMap、HashSet、LinkedHashSet and LinkedHashMap Java 并发编程  > ​ 线程机制、线程通信、J.U.C组件、JMM、线程安全、锁优化 Java I/O  磁盘...

    超级有影响力霸气的Java面试题大全文档

     ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,...

    Java开发技术大全 电子版

    3.2.7对象的释放和垃圾收集机制108 3.3成员变量的定义与使用109 3.3.1成员变量的定义109 3.3.2成员变量的访问权限110 3.3.3实例成员变量和静态成员变量114 3.4方法的定义和实现116 3.4.1方法的声明117 3.4.2...

    java8集合源码分析-LearningNotes:Java笔记

    源码分析:ArrayList、Vector、LinkedList、HashMap、ConcurrentHashMap、HashSet、LinkedHashSet and LinkedHashMap 线程状态、线程机制、线程通信、J.U.C 组件、JMM、线程安全、锁优化 磁盘操作、字节操作、字符...

    java核心知识点整理.pdf

    25 3:ServicorTo 和 ServicorFrom 互换................................................................................................................25 2.3.3.1. 2.4.1. 如何确定垃圾 ......................

    leetcode题库-JavaInterview:关于采访和书籍的注意事项

    源码分析:ArrayList、Vector、CopyOnWriteArrayList、LinkedList、HashMap、ConcurrentHashMap、LinkedHashMap、WeekHashMap。 线程使用方式、两种互斥同步方法、线程协作、JUC、线程安全、内存模型、锁优化。 运行...

    进销存系统文档作业例子

    ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    收集的常见的专业问题解决办法.rar

    2009-02-24 08:31 61003 61003 常见的专业问题解决办法\Java容器类List、ArrayList、Vector及map、HashTable、HashMap的使用与区别.rar 2009-02-24 08:29 40960 13763 常见的专业问题解决办法\java容器类介绍.doc ...

Global site tag (gtag.js) - Google Analytics