Java用什么替代vector_关于java.util.Vector:java.util.Vector-替代品

以前,我总是以为Vector在长度未知的情况下可以很好地用于非描述对象。 据我所知,我也认为它也是线程安全的

不再使用Vector会发生什么变化,替代方案是什么?

很好奇Vector尚未被弃用。 我想既然没有一对一的替代方法,他们还没有这样做。

请注意,对于Hashtable也是这样,请改用HashMap。

就其线程安全List实现而言,@skaffman CopyOnWriteArrayList或多或少是一对一的替换。 对于大多数用法,CopyOnWriteArrayList应该提供比Vector更好的性能。

您应该使用ArrayList而不是Vector。 Vector使用了内部同步,但是对于实际的一致性而言,这很少够好,并且仅在确实不需要时才减慢执行速度。

另请参阅此stackoverflow问题。

关于很少有"足以达到实际一致性"的好点。如果一个集合对多个线程可见,则您可能应该使用(并充分理解)java.util.concurrent中的适当集合。而且,如果不能通过多个线程访问它,则ArrayList会更便宜。消除多个线程可能"使用"集合的灰色区域:您不能使集合本质上是线程安全的;客户如何使用它始终是一个因素。

如今,您知道Vector是否已得到改进,还是必须坚持使用ArrayList?

@AquariusPower合同指定它需要使用同步,因此无法真正进行改进。也就是说,现代JVM有时可以删除同步作为一种优化,但总的来说,使用ArrayList更好。

您可以改用ArrayList。

如果需要同步版本,可以执行以下操作:

ArrayList arrayList = new ArrayList();

List synchList = Collections.synchronizedList(arrayList);

当需要List实现但不需要线程安全时,请使用ArrayList;当您需要线程安全的List实现时,请使用CopyOnWriteArrayList。

您需要记住,CopyOnWriteArrayList在更改操作(添加,删除...)上复制整个数组。仅当遍历操作(获取,迭代...)远远超过变异操作时,才应使用CopyOnWriteArrayList。来源:docs.oracle.com/javase/7/docs/api/java/util/concurrent/

现在,ArrayList是更好使用的类。 Vector现在被认为是旧版,并且具有线程安全性,从而增加了性能开销。

Vector是Java 1.0的旧式收集类。在Java 1.2中(很久以前!),添加了Collections Framework,其中包括新的集合类,例如ArrayList和HashMap,这些类旨在替换旧的类Vector和Hashtable。

如前所述,旧版收集类具有内置的同步,这对于许多应用程序来说是不必要的。同步具有性能开销,因此,如果不必要,则不应使用它。

在某些情况下(当您的程序是多线程的,并且多个线程访问相同的数据时),您需要同步集合。某些人会使用旧的Vector或Hashtable类,但是更好的方法是使用带有ArrayList的同步包装:

// Your standard, unsynchronized list

List data = new ArrayList();

// Use this to put it into a synchronization wrapper

List syncedData = Collections.synchronizedList(data);

有关更多信息,请参见Collections.synchronizedList()的API文档(和其他方法)。

如果您需要线程安全的List,则在大多数情况下,CopyOnWriteArrayList可提供比Collections.synchronizedList(data)更好的性能。

@Dnal那不是真的。

@StefanReich请详细说明

CopyOnWriteArrayList每次更改都会复制整个列表,因此,如果您对列表进行大量更改,它可能会变得非常慢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值