【发布时间】:2019-03-28 19:38:00
【问题描述】:
我想澄清一下 Java 8 中 hashtable 和 hashmap 之间的区别。
据我所知,HashTable 的功能类似于 HashMap,但它是线程安全的,并且不允许空键或空值。我知道 Java 8 更新了 HashMap 类,因此当发生冲突时,它不会在存储桶中创建具有相同哈希码的项目的链接列表,而是创建一棵树。
hashtable也是这样吗?即使在碰撞之前,树也是默认存储方法吗? (例如,当第一个放入桶中的项目放在那里时,它只是一个没有分支的树根。)
另外,java 如何确保哈希表是线程安全的?当两个线程尝试同时访问一条数据时,它会创建一个队列吗?
【问题讨论】:
-
关于线程安全,来自 Hashtable 的 javadoc:“与新的集合实现不同,{@code Hashtable} 是同步的。”。
标签: java multithreading java-8 hashmap hashtable