java.util.Vector – 替代品
以前我总是认为当长度未知时,Vector可以用于非描述对象。 据我所知,我认为它也是线程安全的
什么会改变那个Vector
不应再使用了,还有什么可以替代?
您应该使用ArrayList
而不是Vector
。 Vector
使用了内部同步,但这对于实际的一致性来说很少足够好,并且只在不需要时才会减慢执行速度。
另请参阅此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(很久以前!)中,添加了集合框架 ,其中包括新的集合类,如ArrayList
和HashMap
,它们旨在替换遗留类Vector
和Hashtable
。
如前所述,遗留集合类具有内置同步,这对于许多应用程序来说是不必要的。 同步具有性能开销,因此如果没有必要,则不应使用它。
在某些情况下(当您的程序是multithreading的,并且多个线程访问相同的数据时),您需要同步您的集合。 然后有些人会使用旧的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文档(以及其他方法)。