Java 中的 Hashtable 为什么要小写,而不是驼峰命名?

JAVA herman 841浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

Hashtable 和 HashMap 是面试中必问的两个数据结构知识点。很多人拿他们做比较,今天我们就一起来谈谈 Hashtable!

在开始之前,我先来问一个问题,Hashtable 中的 T 为什么不是大写。我百度谷歌了很久都没有合理的答案!根据国外网友的评论得知,Hashtable 之所以没有遵循驼峰命令是因为当初的程序员书写时产生的 bug,后来虽然 sun 注意到了这个问题。但是考虑到历史兼容性问题,就选择了保持原状!

Java 中的 Hashtable 类结构图

说起 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。

 

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » Java 中的 Hashtable 为什么要小写,而不是驼峰命名?