常见的面试问题之一是“Hashtable和Hashtable有什么区别 哈希图 “当我开始使用它们时,无论它们之间的差异如何,我都会使用它们中的任何一个。在我们真正看到差异之前,让我先简要介绍一下两者。
爪哇 哈希图 :
- 爪哇 中的HashMap
- 哈希图 如何在竞彩篮球分析中工作
- 哈希图 中的hash和indexfor方法
- 爪哇 中的哈希码和equals方法
- 如何通过键和值对HashMap进行排序
- 哈希图 和Hash之间的区别 组
- 哈希图 和Hashtable之间的区别
- 如何遍历HashMap
哈希图
哈希图 实施 地图 接口 将键映射到值。它不同步,也不是线程安全的。不允许重复的键,并且允许空键以及值。
1 2 3 4 5 |
哈希图 < 英格 , 串 > 员工哈希图= 新 哈希图 < 整数 , 串 >(); 员工哈希图. 放 (1, “阿尔伯特” ); 员工哈希图. 放 (2, 空值 ); //可以正常工作 |
哈希表
哈希表实现Map 接口 将键映射到值。它是同步的并且是线程安全的。不允许使用重复键,也不允许使用null键。
1 2 3 4 5 |
哈希表 < 英格 , 串 > 员工哈希图= 新 哈希表 < 整数 , 串 >(); 员工哈希图. 放 (1, “阿尔伯特” ); 员工哈希图. 放 (2, 空值 ); //不允许,并且在运行时将引发NullPointer异常 |
哈希表 与HashMap:
参数
|
哈希表
|
哈希图
|
---|---|---|
线程安全
|
是
|
没有
|
已同步
|
是
|
没有
|
性能
|
由于使用了adSafe和Synchronized,因此通常比HashMap慢
|
在单线程环境中,它比Hashtable快得多。因此,如果您不在多线程环境中工作,则建议使用hashMap
|
空键
|
不允许
|
允许空键和值
|
快速失败
|
哈希表中的枚举不会很快失败
|
hashMap中的迭代器快速失败
|
延伸
|
它扩展了相当古老的Dictionary类
|
它扩展了AbstractMap类
|
另类
|
别无选择
|
您可以将ConcurrentHashMap用于多线程环境
|
一些重要点需要讨论。
- 同步意味着只有一个线程可以在一个时间点修改一个表。当任何线程对哈希表执行更新操作时,它将获取其上的锁,而其他线程则必须等待锁被释放。
- 快速失败迭代器意味着,如果一个线程在哈希表上进行迭代,而另一个线程试图在结构上修改哈希图,则它将引发ConcurrentModification Exception并立即失败。结构上的修改意味着插入或删除可以更改地图结构的元素。
我们可以同步HashMap吗?
是的,我们还可以借助Collections.synchonizedMap(hashmap)同步HashMap,以便可以通过以下方式同步HashMap:
1 2 3 |
地图 地图 =馆藏.synchonizedMap( 哈希图 ) |
请通过 爪哇 核心面试题 了解更多面试问题。