为什么广泛认为Vector和HashTable将被弃用?

10 浏览
0 Comments

为什么广泛认为Vector和HashTable将被弃用?

也就是说,Sun/Oracle 公司有关这个问题的官方说法吗?\n谢谢。\n编辑:\n我知道有另一个话题,但它没有提到是否有官方说法,这就是为什么这个话题被表述为“广泛认为”。此外,那个话题只涉及到了 Vector,而没有涉及到 Hashtable。

0
0 Comments

Vector和HashTable被广泛认为将被弃用的原因有两个:同步和性能。Vector和Hashtable都是同步的,这意味着它们在多线程环境下可以安全使用,但也导致了严重的性能开销。在大多数情况下,我们并不需要这种同步机制。另外,Hashtable还不能合理地存储null值,这也限制了它的使用。

为了解决这个问题,人们开始使用其他替代方案,比如使用List接口的实现类ArrayList或LinkedList来替代Vector,使用HashMap来替代Hashtable。这些替代方案不需要同步,因此性能更好。另外,通过使用并发集合类ConcurrentHashMap,也可以在多线程环境下安全使用集合,而无需对每个操作进行同步。

尽管存在同步问题,但使用synchronizedList并不能解决并发问题。因为synchronizedList只是对每个操作进行同步,而不是对整个列表进行同步。因此,在多线程环境下仍然可能出现并发问题。为了解决这个问题,可以使用并发集合类CopyOnWriteArrayList,它能够在迭代时保证一致性。

总结起来,Vector和HashTable被广泛认为将被弃用的原因是它们的同步机制导致了性能开销,并且Hashtable不能存储null值。为了解决这个问题,人们开始使用其他替代方案,比如ArrayList、LinkedList和HashMap,并且使用并发集合类来解决并发问题。

0