以前我总是认为当长度未知时,Vector可以用于非描述对象。据我所知,我认为它也是线程安全的
不应再使用Vector
会有什么变化,替代方案是什么?
答案 0 :(得分:38)
您应该使用ArrayList
代替Vector
。 Vector
使用了内部同步,但这对于实际的一致性来说并不是很好,只有在不需要时才会减慢执行速度。
答案 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,其中包括新的集合类,例如ArrayList
和HashMap
,它们旨在替换遗留类Vector
和Hashtable
。
如前所述,遗留集合类具有内置同步,这对于许多应用程序来说是不必要的。同步具有性能开销,因此如果没有必要,则不应使用它。
在某些情况下(当您的程序是多线程的,并且多个线程访问相同的数据时),您需要同步您的集合。然后,有些人会使用旧的Vector
或Hashtable
类,但更好的方法是使用同步包装器,例如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文档(以及其他方法)。