文档章节

Hashtable 为什么不叫 HashTable?

Java技术栈
 Java技术栈
发布于 2018/12/10 10:26
字数 690
阅读 121
收藏 2

行业解决方案、产品招募中!想赚钱就来传!>>>

前几天在写《HashMap 和 Hashtable 的 6 个区别》这篇文章的时候,差点把 Hashtable 写成了 HashTable,后来看源码证实了是:Hashtable,小写的 "t"able,不符合驼峰命名规则。

什么是驼峰命名规则,来看下面的关键字:

  • HashMap
  • ArrayList
  • ConcurrentHashMap

简单来说就是,标识符的每个单词首字母必须大写,看起来像是驼峰的形状。

当时就很好奇,Hashtable 为什么不是 HashTable 呢?作为一名初级的 Java 程序员都应该知道的基本的驼峰命名规则,为什么 JDK 代码里面还有这种不规范的命名呢?

我想大家应该都比较好奇,我特意去查了下资料,没有查到官方的说法,不过在 stackoverflow 上看到了同样的这个问题。

原贴如下:

https://stackoverflow.com/questions/12506706/why-is-the-t-in-hash-tablehashtable-in-java-not-capitalized

最佳答案是:

Hashtable was created in Java v1. The consistent naming conventions for collections were established later, in Java2, when the other classes were published as part of the brand new Java Collection Framework.

Which btw made Hashtable obsolete, so it should not be used in new code.

Hope that helps.

意思就是:

Hashtable 是在 Java 1.0 的时候创建的,而集合的统一规范命名是在后来的 Java 2 开始约定的,当时其他一部分集合类的发布构成了新的集合框架。

顺便说一下,这样就使得 Hashtable 过时了,所以不应该在新代码中继续使用它。

栈长看了下,Hashtable 确实是 JDK1.0 添加的,最早的一个集合类,这样也说得过去。那为什么不在后面的 JDK 版本中修复它呢?可能是为了考虑兼容使用 JDK 老版本的系统吧。所以就将错就错封存在了 JDK,直到现在 JDK 11 了也还没有修复或者考虑删除它。

另外,关于《HashMap 和 Hashtable 的 6 个区别》,有人留言说可以使用 currenthashtable。

栈长又去证实了下,没有 currenthashtable 和 concurrenthashtable 这个类,所有 concurrent* 开头的并发类和接口都在这里了。

好了,关于 Hashtable 的迷惑就此全都解开了。

所有 Java JVM、多线程、集合、新特性等系列文章请在公众号 “Java技术栈” 后台回复关键字:java,后续也会不断更新。

有收获?转发给更多的人吧!

本文原创首发于公众号:Java技术栈(id:javastack),关注公众号在后台回复 "java" 可获取更多,转载请原样保留本信息。

Java技术栈
粉丝 206
博文 692
码字总数 1212763
作品 0
深圳
架构师
私信 提问
加载中
此博客有 1 条评论,请先登录后再查看。
JBoss 事务服务--Narayana

JBoss 事务服务(JBossTS 也叫 Narayana )保护企业数据破坏,保证数据完整、准确。为基于Java的应用程序(包括那些写给JEE和EJB框架)从而消除风险和相关成本非常耗时的和解失败后。...

匿名
2012/11/04
1.3K
0
eternal mvc 框架--eternal

spring在设计上真博大精深啊,无论从哪点来说,都非常不错,当然啦大家一直说他的配置麻烦,这应该是人家的设计思想吧,把每个类都看成一个bean,以xml的方式配置关系,就像java的面向对象,...

青青小树
2013/01/09
1.3K
0
设计模式的误区,Java程序员对设计模式的诋毁及滥用

首先,设计模式是一种程序设计的方法,指的是某一领域/类型的程序的设计方法。 所有的设计模式都是在前人/以往软件的基础上总结的,这一点需要非常注意。 Java程序员对设计模式第一个诋毁的就...

clonne
2012/07/07
2.3K
35
JDK高性能编程之容器

JDK高性能编程之容器 读书笔记内容部分来源书籍深入理解JVM、互联网等,如有错误,请指正,我会及时更正,感谢。 先放一个类图util,点击打开看明细 j360-jdk调试功能 https://github.com/x...

Hi徐敏
2015/10/17
6.7K
18
垂直型爬虫架构设计(1)

从事爬虫方向开发马上也将近两年时间了,今天基友问我关于爬虫的架构设计问题.其实这么久也想总结一下自己的整个开发的过程,架构的设计问题..对自己进行一些总结..仅作参考. 1.爬虫的分类 : ...

CainGao
2015/09/14
6.7K
23

没有更多内容

加载失败,请刷新页面

加载更多

开源FPGA单板iCESugar

随着产业的发展,近年来FPGA越来越得到市场的重视,5G、矿机、人工智能、图像识别、risc-v、通信等众多领域均可见到FPGA的身影,目前比较知名的FPGA厂商有xilinx、altera、lattice等,其中x...

whoisliang
57分钟前
6
0
合并记录帮助文档

合并记录步骤用于将两个不同来源的数据合并,这两个来源的数据分别为旧数据和新数据;该步骤将旧数据和新数据按照指定的关键字匹配、比较、合并,并显示差异信息。接下来就详细介绍一下该步骤...

osc_slnrw1du
57分钟前
19
0
Spark之RDD转换算子(transformation)大全

前面已经给大家讲过RDD原理,今天就给大家说说RDD的转换算子有哪些,以便大家理解。 对于转换操作,RDD的所有转换都不会直接计算结果,仅记录作用于RDD上的操作,当遇到动作算子(Action)时...

osc_3nr2bq5w
58分钟前
11
0
自定义常量数据帮助文档

自定义常量数据步骤主要用于增加自定义字段和行集数据到流中,可增加多个字段并为每个字段赋予行集的值。步骤配置信息如图1所示。 图1 自定义常量数据步骤配置信息 下文详细解释各控件的含义...

osc_r9wwwi0j
59分钟前
10
0
Linux安装配置ftp(Ceonts 7)

1、安装vsftpd yum -y install vsftpd (我这里已经安装好了,只要不报错即安装成功) 安装完成后可以在/etc/vsftpd目录下看到vsftpd.conf 文件,这是vsftp的配置文件。 2、 添加一个ftp用户...

osc_tko37abm
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部