Hashtable 為什么不叫 HashTable?


前幾天在寫《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" 可獲取更多,轉載請原樣保留本信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM