Hashtable 和 HashMap 是面试中必问的两个数据结构知识点。很多人拿他们做比较,今天我们就一起来谈谈 Hashtable!
在开始之前,我先来问一个问题,Hashtable 中的 T 为什么不是大写。我百度谷歌了很久都没有合理的答案!根据国外网友的评论得知,Hashtable 之所以没有遵循驼峰命令是因为当初的程序员书写时产生的 bug,后来虽然 sun 注意到了这个问题。但是考虑到历史兼容性问题,就选择了保持原状!
说起 Hashtable 大家能谈到的几点,无非下面几点:
- 相比 HashMap,Hashtable 是线程安全的。因为 Hashtable 的几个重要方法都加上了 synchronized 关键字。
- Hashtable 的 key、value 都不可以为 null。HashMap 最多只允许一条记录的键为 null,允许多条记录的值为 null。
- Hashtable 承自 Dictionary 类,HashMap 继承自 AbstractMap 类。
- Hashtable 已被淘汰,可以使用 ConcurrentHashMap 替代,这一点可以在 Hashtable 源码中的注释说明中找出。
- Hashtable、HashMap 都使用了 Iterator。而由于历史原因,Hashtable 还使用了 Enumeration 的方式。
- Hashtable 直接使用对象的 hashCode。而 HashMap 重新计算 hash 值。
- HashTable 中的 hash 数组初始大小是 11,增加的方式是 old*2+1。HashMap 中 hash 数组的默认大小是 16,而且一定是 2 的指数。
- HashMap 有 containsvalue 和 containsKey 两个方法,Hashtable 使用的是 contains 方法。
HashMap 实现大多都是相同的,也没什么可以说的。 可以看作是 Hashtable 的轻量级实现。由于 Hashtable 和 HashMap 实现大多都是相同的,也没什么可以说的。另外 Hashtable 也不在被推荐使用了,所以我建议大家不要在使用它,改用 ConcurrentHashMap。
: » Java 中的 Hashtable 为什么要小写,而不是驼峰命名?
原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/251934.html