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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙涛00 中级黑马   /  2013-10-24 09:36  /  2089 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们都知道ArrayList是非同步的,Vector是线程同步。它们都实现了List接口,每个ArrayList都是一个容器,当多个线程同时访问一个ArrayList的时候出现了不同步的问题,而Vector在多线程访问的时候是线程同步的,这二者在同步问题上根本的区别是什么?还有就是它们都有iterator和listIterator方法,所返回的迭代器是“快速失败”的,这里的快速失败是什么意思?

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
vector具有自己独特的方式:枚举,而不是用迭代器,同时,vector是同步的,较低效,这也是vector被多数环境下被替代的主要原因;
回复 使用道具 举报
我之前在做坦克大战的时候,子弹类,将每个坦克的多颗子弹装入到Vector集合中,而多个坦克线程同时运行,如果用ArrayList会出现很诡异的现象:子弹击中坦克,子弹销毁,但是在游戏面板中仍然还存在这颗子弹。

shot.png (74.96 KB, 下载次数: 120)

shot.png
回复 使用道具 举报
Vector 变长数组算法实现 早期提供 慢 线程安全
Vector 旧(1.2以前)
回复 使用道具 举报
那Vector一般被替代成什么呢?

vector被替代.png (10.61 KB, 下载次数: 101)

vector被替代.png
回复 使用道具 举报
首先,我通过有一次查找Vector的api,唉函数功能中没有看到Iterator,而它的去除元素的方式是用枚举
        Enumeration<E> elements()     返回此向量的组件的枚举。 所以当你用Iterator取它的元素时,肯定失败报错。
第二,从版本上也可以看出来,Vector是1.0版本的,而Iterator为1.2版本的。
第三,但用Vector时,它是同步,每次都要进行锁的判断,很低效。所以用不同步的ArrayList替代,当需要同步时,只需要自己加锁即可。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马