天天看點

Hashtable 為什麼不叫 HashTable?

前幾天在寫《HashMap 和 Hashtable 的 6 個差別》這篇文章的時候,差點把 Hashtable 寫成了 HashTable,後來看源碼證明了是:Hashtable,小寫的 "t"able,不符合駝峰命名規則。

Hashtable 為什麼不叫 HashTable?

當時就很好奇,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,後續也會不斷更新。

有收獲?轉發給更多的人吧!