2013-05-19 68 views
2

我通常在非多線程環境中工作,所以通常使用HashMap而不是Hashtable。我知道兩者之間的區別,我也知道Hashtbale是在引入Java Collection框架之前引入的。 如果我們通過哈希表的源代碼,我們可以找到爲什麼Hashtable不是Java Collection框架的一部分?

public class Hashtable<K,V> 
extends Dictionary<K,V> 
implements Map<K,V>, Cloneable, java.io.Serializable {... 

我的觀點是Hashtable的是之前Java集合框架引入方式(這樣的方式之前地圖介紹)。由於Hashtable實現Map,Hashtable實現已被修改。我的問題是爲什麼當Map是Hashtable不是Java Collection Framework的一部分?

+1

它可能會實現Map接口(這不是拉伸,因爲它已經具有該功能),但它不擴展AbstractMap,並且可能*是關鍵。 –

+3

嗯,根據javadocs:_As Java 2平臺v1.2,這個類被改造以實現Map接口,使它成爲Java Collections Framework的成員._請參閱:http://docs.oracle.com/ javase/6/docs/api/java/util/Hashtable.html – macias

+0

因爲它是第一個,因爲相應的'@ since'註釋顯示清楚。 – EJP

回答

2

散列表是作爲Java 1.0的一部分引入的,它沒有使用Map。 在版本1.2中,它被改爲實現Map,因此成爲了Collections框架的一部分。 http://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html

+0

這很有道理。但是每當我們提到Java Collection框架時都沒有人提到Hashtable,我感到很驚訝。所以Hashtable是Java Collection Framework的一部分。非常感謝! –

+0

@AniketThakur這可能是因爲'HashMap'或'ConcurrentHashMap'通常比'HashTable'更受歡迎,如[HashTable的Java文檔]中所述(http://docs.oracle.com/javase/7/docs/ API/JAVA/util的/ Hashtable.html)。 –

2

API document of Hashtable

從Java 2平臺v1.2的最後一段,這一類是改進來實現Map接口,使它成爲Java Collections Framework的成員。

所以你的問題實際上是#0#$ &#$ &。

相關問題