java.util.Vector - 替代品

时间:2009-11-24 18:52:55

标签: java vector arraylist

以前我总是认为当长度未知时,Vector可以用于非描述对象。据我所知,我认为它也是线程安全的

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

5 个答案:

答案 0 :(得分:38)

您应该使用ArrayList代替VectorVector使用了内部同步,但这对于实际的一致性来说并不是很好,只有在不需要时才会减慢执行速度。

另见this stackoverflow question

答案 1 :(得分:15)

您可以改用ArrayList

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

ArrayList arrayList = new ArrayList();

List synchList = Collections.synchronizedList(arrayList);

答案 2 :(得分:7)

ArrayList现在是更好的课程。 Vector现在被视为Legacy,并且具有线程安全性的额外性能开销。

答案 3 :(得分:7)

当您需要ArrayList实现但不需要线程安全时使用List,并在需要线程安全的CopyOnWriteArrayList实现时使用List。< / p>

答案 4 :(得分:6)

Vector是Java 1.0中的遗留集合类。在Java 1.2(很久以前!)中,添加了Collections Framework,其中包括新的集合类,例如ArrayListHashMap,它们旨在替换遗留类VectorHashtable

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

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

// Your standard, unsynchronized list
List<String> data = new ArrayList<String>();

// Use this to put it into a synchronization wrapper
List<String> syncedData = Collections.synchronizedList(data);

有关详细信息,请参阅Collections.synchronizedList()的API文档(以及其他方法)。