A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄成超 中级黑马   /  2013-1-29 18:08  /  2219 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

ArrayList和Vector有什么区别,为什么说ArrayList可以替代Vector

8 个回复

倒序浏览
ArrayList和Vector,Vector是1.0版本就有的,线程同步安全,低效,ArrayList是1.4以后的,一步不安全,高效。他们的用法大致相同,现在一般都是用ArrayList比较好!
回复 使用道具 举报
vertor 有个枚举 在IO中 SequenceInputStream类 要使用到这东西..
就是多一个枚举 其他就一无是处了....
同步的话..自己可以加在ArrayList里面其他基本相同..ArrayList更为高效.
回复 使用道具 举报
本帖最后由 刘军亭 于 2013-1-29 18:56 编辑

ArrayList:底层使用的数组结构,特点:查询速度很快,但是增删稍慢.线程不同步.50%延长
Vector:底层使用的是数组数据结构,线程同步.被ArrayList替代了.100%延长

因为他们两个的功能相同,ArrayList是后来版本出来替代Vector的因为Vector是同步的效率低。
回复 使用道具 举报
板凳  最近刚好在学习集合类   记得以前开发一直在用ArrayList,没细想过。  学习下
回复 使用道具 举报
确实arraylist要常用些,不过,最近在公司的老项目中看到了vector的身影~
回复 使用道具 举报
。。。一个1.0,一个1.4出现。。然后功能基本相同,可以想象如果不好的话sun公司不会吃饱了撑的出个这个东西,然后我们都知道新版本一般都是要比旧版本号的。。。
回复 使用道具 举报
Vector和ArrayList Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素。
  Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
  当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间


ArrayList和Vector在从指定位置取得元素,从容器的末尾增加和删除元素都非常的有效,所有的这些操作都能在一个常数级的时间(O(1))内完成。但是从一个其他的位置增加和删除一个元素就显得颇为费时,差不多需要的时间为O(n-i),这里的n代表元素个数,i代表要增加和删除的元素所在的位置。这些操作需花费更多的时间,因为你需要挨个移动i和更高位置的元素。那么,以上这些到底说明了什么呢?
  
  这意味着,如果你取得一个元素,或者从数组末尾增加或删除一个元素的话,随便你使用Vector和ArrayList。如果你想要对数组内容做其他操作的话,那么就为自己好另一个容器吧。比喻说,LinkedList可以在常数级时间(O(1))内为任意一个位置的元素增加和删除。但是,取得一个元素,会稍微慢一点,时间要用O(i) ,这个i是元素的位置。通过ArrayList也是很简单的,因为你可以简单使用一个索引,而不是构造一个iterator 。LinkedList也为每个插入的元素建立一个内部对象。所以,你也必须知道,同时产生了垃圾对象。
回复 使用道具 举报
ArrayList是新版本。   作为一个常规用途的对象容器使用,用于替换原先的Vector。允许我们快速访问元素,但在从列表中部插入和删除元素时,速度却嫌稍慢。一般只应该用ListIterator对一个ArrayList进行向前和向后遍历,不要用它删除和插入元素;与LinkedList相比,它的效率要低许多
vector类所有的方法都是被同步的,虽然两个线程并发访问vector对象是安全的,但如果只用一个线程访问失量,由于源代码调用了被同步的方法,其运行时间要长一些。arrayList为非同步的。就是说单线程时要用arrayList,多线程时考虑用vector。
vector是线程同步的,所以它也是线程安全的,而arraylist是线程异步的,是不安全的。如果不考虑到线程的安全因素,一般用arraylist效率比较高。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马