前幾天在寫《HashMap 和 Hashtable 的 6 個區別》這篇文章的時候,差點把 Hashtable 寫成了 HashTable,後來看源碼證明了是:Hashtable,小寫的 "t"able,不符合駝峯命名規則。java
什麼是駝峯命名規則,來看下面的關鍵字:程序員
- HashMap
- ArrayList
- ConcurrentHashMap
簡單來講就是,標識符的每一個單詞首字母必須大寫,看起來像是駝峯的形狀。api
當時就很好奇,Hashtable 爲何不是 HashTable 呢?做爲一名初級的 Java 程序員都應該知道的基本的駝峯命名規則,爲何 JDK 代碼裏面還有這種不規範的命名呢?多線程
我想你們應該都比較好奇,我特地去查了下資料,沒有查到官方的說法,不過在 stackoverflow 上看到了一樣的這個問題。併發
原貼以下:框架
最佳答案是:3d
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.code
Which btw made Hashtable obsolete, so it should not be used in new code.blog
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" 可獲取更多,轉載請原樣保留本信息。