摘要:棧長(zhǎng)看了下,確實(shí)是添加的,最早的一個(gè)集合類(lèi),這樣也說(shuō)得過(guò)去。那為什么不在后面的版本中修復(fù)它呢可能是為了考慮兼容使用老版本的系統(tǒng)吧。棧長(zhǎng)又去證實(shí)了下,沒(méi)有和這個(gè)類(lèi),所有開(kāi)頭的并發(fā)類(lèi)和接口都在這里了。
前幾天在寫(xiě)《HashMap 和 Hashtable 的 6 個(gè)區(qū)別》這篇文章的時(shí)候,差點(diǎn)把 Hashtable 寫(xiě)成了 HashTable,后來(lái)看源碼證實(shí)了是:Hashtable,小寫(xiě)的 "t"able,不符合駝峰命名規(guī)則。
什么是駝峰命名規(guī)則,來(lái)看下面的關(guān)鍵字:
HashMap
ArrayList
ConcurrentHashMap
簡(jiǎn)單來(lái)說(shuō)就是,標(biāo)識(shí)符的每個(gè)單詞首字母必須大寫(xiě),看起來(lái)像是駝峰的形狀。
當(dāng)時(shí)就很好奇,Hashtable 為什么不是 HashTable 呢?作為一名初級(jí)的 Java 程序員都應(yīng)該知道的基本的駝峰命名規(guī)則,為什么 JDK 代碼里面還有這種不規(guī)范的命名呢?
我想大家應(yīng)該都比較好奇,我特意去查了下資料,沒(méi)有查到官方的說(shuō)法,不過(guò)在 stackoverflow 上看到了同樣的這個(gè)問(wèn)題。
原貼如下:
https://stackoverflow.com/que...
最佳答案是:
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 的時(shí)候創(chuàng)建的,而集合的統(tǒng)一規(guī)范命名是在后來(lái)的 Java 2 開(kāi)始約定的,當(dāng)時(shí)其他一部分集合類(lèi)的發(fā)布構(gòu)成了新的集合框架。順便說(shuō)一下,這樣就使得 Hashtable 過(guò)時(shí)了,所以不應(yīng)該在新代碼中繼續(xù)使用它。
棧長(zhǎng)看了下,Hashtable 確實(shí)是 JDK1.0 添加的,最早的一個(gè)集合類(lèi),這樣也說(shuō)得過(guò)去。那為什么不在后面的 JDK 版本中修復(fù)它呢?可能是為了考慮兼容使用 JDK 老版本的系統(tǒng)吧。所以就將錯(cuò)就錯(cuò)封存在了 JDK,直到現(xiàn)在 JDK 11 了也還沒(méi)有修復(fù)或者考慮刪除它。
另外,關(guān)于《HashMap 和 Hashtable 的 6 個(gè)區(qū)別》,有人留言說(shuō)可以使用 currenthashtable。
棧長(zhǎng)又去證實(shí)了下,沒(méi)有 currenthashtable 和 concurrenthashtable 這個(gè)類(lèi),所有 concurrent* 開(kāi)頭的并發(fā)類(lèi)和接口都在這里了。
好了,關(guān)于 Hashtable 的迷惑就此全都解開(kāi)了。
所有 Java JVM、多線(xiàn)程、集合、新特性等系列文章請(qǐng)?jiān)谖⑿殴娞?hào) “Java技術(shù)棧” 后臺(tái)回復(fù)關(guān)鍵字:java,后續(xù)也會(huì)不斷更新。
有收獲?轉(zhuǎn)發(fā)給更多的人吧!
本文原創(chuàng)首發(fā)于微信公眾號(hào):Java技術(shù)棧(id:javastack),關(guān)注公眾號(hào)在后臺(tái)回復(fù) "java" 可獲取更多,轉(zhuǎn)載請(qǐng)?jiān)瓨颖A舯拘畔ⅰ?/pre>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/72624.html
摘要:線(xiàn)程安全是線(xiàn)程安全的,不是線(xiàn)程安全的。是添加的,貌似沒(méi)人用過(guò)這個(gè),棧長(zhǎng)我也沒(méi)用過(guò)。。最后一點(diǎn)有幾個(gè)人知道知道的給棧長(zhǎng)點(diǎn)個(gè)贊回應(yīng)一下,不知道的有收獲的也點(diǎn)一個(gè)贊支持一下吧。 HashMap 和 Hashtable 是 Java 開(kāi)發(fā)程序員必須要掌握的,也是在各種 Java 面試場(chǎng)合中必須會(huì)問(wèn)到的。 但你對(duì)這兩者的區(qū)別了解有多少呢? 現(xiàn)在,棧長(zhǎng)我給大家總結(jié)一下,或許有你不明朗的地方,在棧長(zhǎng)...
摘要:什么是散列表和散列函數(shù)哈希表,也叫散列表,是根據(jù)關(guān)鍵碼值而直接進(jìn)行訪(fǎng)問(wèn)的數(shù)據(jù)結(jié)構(gòu)。根據(jù)鍵值從散列表中移除值。請(qǐng)實(shí)現(xiàn)散列表將和存在一個(gè)對(duì)象中即可定義一個(gè)包含和屬性的類(lèi)并分配到散列表。 showImg(https://segmentfault.com/img/remote/1460000019005270); 這是第五周的練習(xí)題,上周忘記發(fā)啦,這周是復(fù)習(xí) Dictionary 和 Hash...
摘要:什么是散列表和散列函數(shù)哈希表,也叫散列表,是根據(jù)關(guān)鍵碼值而直接進(jìn)行訪(fǎng)問(wèn)的數(shù)據(jù)結(jié)構(gòu)。將字典的所有鍵名以數(shù)組的形式返回。根據(jù)鍵值從散列表中移除值。這是第五周的練習(xí)題,上周忘記發(fā)啦,這周是復(fù)習(xí) Dictionary 和 HashTable。 下面是之前分享的鏈接: 1.每周一練 之 數(shù)據(jù)結(jié)構(gòu)與算法(Stack) 2.每周一練 之 數(shù)據(jù)結(jié)構(gòu)與算法(LinkedList) 3.每周一練 之 數(shù)據(jù)結(jié)構(gòu)...
摘要:再最壞的情況下,鏈表查找的時(shí)間復(fù)雜度為而紅黑樹(shù)一直是這樣會(huì)提高的效率。中的中定義了一個(gè)變量,當(dāng)節(jié)點(diǎn)個(gè)數(shù)時(shí),將采用紅黑樹(shù)存儲(chǔ)參考資料和的區(qū)別和的區(qū)別 HashMap中的幾個(gè)重要變量 默認(rèn)初始容量,必須是2的n次方 static final int DEFAULT_INITIAL_CAPACITY = 16; 最大容量,當(dāng)通過(guò)構(gòu)造方法傳入的容量比它還大時(shí),就用這個(gè)最大容量,必須是2的n...
摘要:底層的實(shí)現(xiàn)有兩個(gè)非常重要的結(jié)構(gòu)分別是和。簡(jiǎn)單來(lái)說(shuō)就是哈希表的結(jié)構(gòu)維護(hù)了哈希表中插入元素的先后順序,哈希表結(jié)構(gòu)維護(hù)了整個(gè)哈希表的頭和尾。在操作哈希表的過(guò)程中始終保持預(yù)算之間的關(guān)系。 HashTable對(duì)PHP來(lái)說(shuō)是一種非常重要的數(shù)據(jù)結(jié)構(gòu)。很多PHP的內(nèi)部實(shí)現(xiàn)(變量的作用域,函數(shù)表,類(lèi)的屬性、方法,數(shù)組)就是通過(guò)HashTable來(lái)實(shí)現(xiàn)的。最近了解了一下PHP底層HashTable的實(shí)現(xiàn)。...
閱讀 2997·2021-11-25 09:43
閱讀 2449·2021-11-24 09:39
閱讀 2794·2021-09-23 11:51
閱讀 1488·2021-09-07 10:11
閱讀 1514·2019-08-27 10:52
閱讀 1993·2019-08-26 12:13
閱讀 3419·2019-08-26 11:57
閱讀 1458·2019-08-26 11:31