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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄云南 中级黑马   /  2012-3-10 01:17  /  2850 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问ArrayList和Vector有什么具体区别?Vector有获取迭代器的功能吗?是不是要自己用循环结构去遍历Vector的元素。

7 个回复

倒序浏览
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。 size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。 每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法 并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。 和LinkedList一样,ArrayList也是非同步的(unsynchronized)。
Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。
Vector有迭代器,不需用循环去遍历的。
回复 使用道具 举报
ArrayList    底层的数据结构是使用的数组结构 特点:查询速度快,但是增删比较慢
Vector                 底层是数组数据结构。  但是查询很慢,增删也很慢
vector1.0才出现的且现成同步     现成安全性好
arraylist是1.2出现的且现成不同步  安全性一般
他两个的用法基本相同  
回复 使用道具 举报
本帖最后由 乔玉吉 于 2012-3-10 01:54 编辑

ArrayList和Vector底层数据结构都是数组结构,前者是线程不同步,后者是线程同步,
Vector是JDK1.1使用的,JDK1.2出现以后主要用ArrayList,更灵活方便,效率更高

ArraayList获取元素是通过调用iterator方法获取迭代器.hasNext方法判断迭代器中是否还有元素,next方法获取元素.
Vector获取元素是通过调用elements方法获取枚举Enumeration.hasMoreElements方法判断迭代器中是否还有元素,nextElement方法获取元素.
回复 使用道具 举报
彭卫红 2012-3-10 01:54:08
报纸
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
ArrayList 和 Vector 都是List接口的实现类,使用上完全一样,只是实现原理和效率不同。
ArrayList 是底层数组实现的, 查找速度快, 增加和删除元素的速度慢, 不是同步的,线程不安全, 是通过iterator()方法获得迭代器,hasNext()方法判断是否存在下一个元素,next()方法获取下一个元素;

Vector 与 Array基本一样, 是同步的,线程安全,所以效率要低, 迭代Vector集合中的元素是通过Enumeration的hasMoreElements()方法判断是否还有元素,nextElement()方法返回下一个元素;
回复 使用道具 举报
付鹏 中级黑马 2012-3-10 02:38:43
7#
这两个类都实现了List接口他们都是有序集合即存储在这两个集合中的元素的位置都是有顺序的,
Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。
ArrayList与Vector都可以设置初始的空间大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。
Vector有迭代器 不用自己循环去遍历 ,用Iterator就行
回复 使用道具 举报
这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合并且其中的数据是允许重复的
Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马