请教高手,Vector 和 ArriList 得区别 是什么啊? 最好举例说明!

xiaoxongbeijing 2008-04-15 12:40:35
各位通道得朋友,我看了许多关于我同样问题得论坛,可是都没有实际得例子来说明,他们到底有什么区别,什么时候运用呢? 请大家帮我下,我发现面试当中很多地方都是这个问题!
...全文
275 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhou_ye 2008-04-22
  • 打赏
  • 举报
回复
学习了。
tganthem 2008-04-22
  • 打赏
  • 举报
回复
两者都是使用数组的方式存储数据,唯一的区别在于:
Vector使用了Synchronized方法,所以在效率上不如ArrayList~~~
qusic 2008-04-22
  • 打赏
  • 举报
回复
ArrayList比Vector效率高~嘿嘿
taolei 2008-04-21
  • 打赏
  • 举报
回复
已经有很多年没用Vector和Hashtable了,事实上我根本不用这两个类。
包括Collections.SynchronizedCollection()也从来不用。
Vector就能保证线程安全吗?

看看这段代码
public Object getFirst(Vector v)
{
if (v.size() > 0)
return v.remove(0);
else
return null;
}
public List getList(Hashtable map,Object key)
{
if(map.containsKey(key))
return (List)map.get(key);
ArrayList ar = new ArrayList();
map.put(key,ar);
return ar;
}

问题:上面的代码是线程安全的吗?问题出在哪里?
用Collections.SynchronizedCollection就能保证线程安全吗?

kalman03 2008-04-20
  • 打赏
  • 举报
回复
看帮助文档。。。。。
bootupnow 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 Dan1980 的回复:]
瞎扯! ArrayList在任何方面都比Vector强!

至于ArrayList为什么不是线程安全的, 这是由Java 1.3以后的新集合类的设计方式决定的, Java 1.3加入的新集合类默认都不是线程安全的. 因为可以用Collections.SynchronizedCollection()方法得到任何集合类的线程安全版本.

在一个不需要兼容java 1.3以前版本的程序中, 请放弃使用Vector, Stack和Hashtable这些遗留类. 它们的问题很多.
[/Quote]
Collections.SynchronizedCollection()
hyzhx 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xql80329 的回复:]
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的


比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成:1. 在 Items[Size] 的位置存放此元素;2. 增大 Size 的值。

在单线程运行的情况下,如果 Size = 0,添加一个元素后,此元素在位置 0,而且 Size=1;
而如果…
[/Quote]
这么说对vector操作是一个原子操作,
而对arraylist操作不是一个原子操作?
KKK2007 2008-04-20
  • 打赏
  • 举报
回复

Vector是线程同步的
ArrayList是线程不同步的
Dan1980 2008-04-20
  • 打赏
  • 举报
回复
瞎扯! ArrayList在任何方面都比Vector强!

至于ArrayList为什么不是线程安全的, 这是由Java 1.3以后的新集合类的设计方式决定的, Java 1.3加入的新集合类默认都不是线程安全的. 因为可以用Collections.SynchronizedCollection()方法得到任何集合类的线程安全版本.

在一个不需要兼容java 1.3以前版本的程序中, 请放弃使用Vector, Stack和Hashtable这些遗留类. 它们的问题很多.
sharelimit 2008-04-19
  • 打赏
  • 举报
回复

建议使用ArrayList
cnjzy0106 2008-04-18
  • 打赏
  • 举报
回复
学习了!
xql80329 2008-04-18
  • 打赏
  • 举报
回复
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的


比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成:1. 在 Items[Size] 的位置存放此元素;2. 增大 Size 的值。

在单线程运行的情况下,如果 Size = 0,添加一个元素后,此元素在位置 0,而且 Size=1;
而如果是在多线程情况下,比如有两个线程,线程 A 先将元素存放在位置 0。但是此时 CPU 调度线程A暂停,线程 B 得到运行的机会。线程B也向此 ArrayList 添加元素,因为此时 Size 仍然等于 0 (注意哦,我们假设的是添加一个元素是要两个步骤哦,而线程A仅仅完成了步骤1),所以线程B也将元素存放在位置0。然后线程A和线程B都继续运行,都增加 Size 的值。
那好,现在我们来看看 ArrayList 的情况,元素实际上只有一个,存放在位置 0,而 Size 却等于 2。这就是“线程不安全”了。
Insourcia_Java_Net 2008-04-18
  • 打赏
  • 举报
回复
值得学习
惭愧的是我没用到过
jimeshengxian 2008-04-18
  • 打赏
  • 举报
回复
需要线程同步时用Vector,保证线程安全,不考虑线程同步和安全时可以用ArrayList
zhengpeiyong 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fufu6530 的回复:]
需要同步的用Vector
反之用ArrayList
[/Quote]
fufu6530 2008-04-15
  • 打赏
  • 举报
回复
需要同步的用Vector
反之用ArrayList
bootupnow 2008-04-15
  • 打赏
  • 举报
回复
学习之
xiaoxongbeijing 2008-04-15
  • 打赏
  • 举报
回复
好得谢谢大家,帮忙了。我懂了! 加个分吧!
karlpan01 2008-04-15
  • 打赏
  • 举报
回复
需要考虑线程安全的时候用Vector
反之用ArrayList
frank3G 2008-04-15
  • 打赏
  • 举报
回复
线程安全的知识咩....

羊```SORRY 昨天刚看过电影《疯羊》,有点过敏
加载更多回复(2)

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧