Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哈希表的优点_Java_Collections - Fatal编程技术网

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