Java 哈希表的优点
与Java 哈希表的优点,java,collections,Java,Collections,与HashMap相比,使用Hashtable的主要优势是什么。因为,Hashtable的主要优点是同步。 现在,还可以使用synchronizedMap()同步地图 Hashtable在collections框架之前就已经存在,因此保留它主要是为了向后兼容。改用ConcurrentHashMap 请注意,有一点语义上的差异-Hashtable不允许空值,而HashMap允许空值和空键。Hashtable早就被弃用了。主要区别在于HashTable是内部同步的,而HashMap不是。但是,这被视为
HashMap
相比,使用Hashtable
的主要优势是什么。因为,Hashtable
的主要优点是同步。
现在,还可以使用synchronizedMap()
同步地图
Hashtable
在collections框架之前就已经存在,因此保留它主要是为了向后兼容。改用ConcurrentHashMap
请注意,有一点语义上的差异-
Hashtable
不允许空值,而HashMap
允许空值和空键。Hashtable
早就被弃用了。主要区别在于HashTable
是内部同步的,而HashMap
不是。但是,这被视为一个缺点,因为在单个线程上使用哈希表
,会在不需要时导致锁定和解锁的惩罚
另外,另一个使哈希表的同步变得不那么有用的点是,在一个序列中执行两个线程安全操作并不能保证整个序列的原子性,例如:
if(key does not exist)
add key
<> P>测试生存和添加都是线程安全的,上面的构造不是,因为另一个线程可能会在中间中断它。因此,无论如何都需要外部同步
因此,我认为这些天没有理由使用HashTable…IINM,实际上不鼓励使用HashTable,您应该尝试在任何新代码中始终使用HashMap。保留哈希表是为了与旧代码兼容。那么为什么java不反对该哈希表呢?没有哈希表这样的东西,它被称为哈希表,它是集合IFS之前的“史前”哈希表。它的方法是同步的,但是它不能保证对填充哈希表的对象的引用不能同时修改。我认为主要区别在于哈希表与HashMap相比是“不允许空值”。限制哈希表上的空值有什么好处?性能方面,synchronizedMap()和Hashtable之间有什么区别?应该没有区别。但是ConcurrentHashMap更好
if(key does not exist)
add key