java.util.Vector – 替代品

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

什么会改变那个Vector不应再使用了,还有什么可以替代?

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

另请参阅此stackoverflow问题 。

您可以使用ArrayList

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

 ArrayList arrayList = new ArrayList(); List synchList = Collections.synchronizedList(arrayList); 

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

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

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

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

在某些情况下(当您的程序是multithreading的,并且多个线程访问相同的数据时),您需要同步您的集合。 然后有些人会使用旧的VectorHashtable类,但更好的方法是使用同步包装器,例如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文档(以及其他方法)。